Android 5.0のAppCompat CardViewでXMLに標高を設定する


95

私が理解していることから、プレビュー段階の早い段階でCardView、JavaのハックなしではにのみXMLで標高を設定する方法はないように見えました。公式リリースが出たので、標高を設定するJavaコードを書かずにXMLでこれを行う方法はありますか?

何もcard_view:cardElevationしないようにしようとしました。私は5.0のエミュレーターを使用しているとき、すべてがうまくいったと思っていました。しかし、私は実際のデバイスで公式バージョンを使用しているので、私のすべてのCardViewの消えました

ロリポップ前、それは素晴らしい働きをします。

ここに私の完全なxmlがあります

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:id="@+id/cv1"
    card_view:cardElevation="4dp"
    android:layout_margin="6dp"
    card_view:cardCornerRadius="3dp"
    android:layout_height="match_parent">

私は問題の背後にいますが、まだ答えはありません。ロリポップにアップグレードしたとき、どういうわけかマージンやパディングが消えてカードの角や端が見えなくなり、完全に平らになりました。
TheLettuceMaster 2014年

回答:


316

マージン/パディングの問題のようです。cardUseCompatPadding属性をtrue に設定してみてください。例えば:

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="6dp"
    card_view:cardUseCompatPadding="true"
    card_view:cardElevation="4dp"
    card_view:cardCornerRadius="3dp">

Android docからの説明:

CardViewは、Lより前のプラットフォームで影を描画するために追加のパディングを追加します。

これにより、カードのサイズがLとLの前で異なる場合があります。CardViewを他のビューと揃える必要がある場合は、変更に対応するためにAPIバージョン固有のディメンションリソースが必要になる場合があります。別の方法として、cardUseCompatPaddingフラグをtrueに設定すると、CardViewはプラットフォームL以降に同じパディング値を追加します。

cardUseCompatPaddingフラグをtrueに設定すると、UIに不要なギャップが追加されるため、デフォルト値はfalseです。


1
card_view:cardUseCompatPadding = "true"は標高が機能するようになりましたが、パディングの束も追加しました...
Taylor

1
cardElevationのデフォルト値は何ですか?
Android開発者、

13

この行があれば

android:hardwareAccelerated="false"

マニフェストアプリケーションタグでは、影は表示されませんでした。この行を削除してみてください

または使用

android:hardwareAccelerated="true"

これは私のために働いた!私もそれがあなたのために働くことを願っています:)


うん!それが問題でした!! どうもありがとうございます!しかし、私が背景に使用したビットマップ画像のためではなく、アプリが遅くなります:(
Kaushal28

13

cardElevation属性を使用する必要があります。
Androidxライブラリ:

MaterialCard公式のマテリアルコンポーネントライブラリに含まれているを使用できます。

implementation 'com.google.android.material:material:1.x.x'

そしてあなたのレイアウトでは:

    <com.google.android.material.card.MaterialCardView
        app:cardElevation="xxdp"
        app:cardUseCompatPadding="true"
        ..>

または、CardViewandroidxパッケージ内:

implementation 'androidx.cardview:cardview:1.x.x'

そしてあなたのレイアウトでは:

     <androidx.cardview.widget.CardView
        app:cardElevation="xxdp"
        app:cardUseCompatPadding="true"
        ..>

OLDサポートライブラリ

<android.support.v7.widget.CardView
    app:cardElevation="xxdp" 
    app:cardUseCompatPadding="true"
    ..>

1
いいえ、もう一度試しましたが、うまくいきませんでした。完全なxmlを上に追加しました。
TheLettuceMaster 2014年

私のために働く。デフォルトの標高は何ですか?
SMBiggs

高度カードの静止高度:2 dpカードの高度:8 dpカードのデフォルトの高度は2 dpです。デスクトップでは、カードは0dpの静止高度を持ち、ホバー時に8dpの高度を得ることができます。google.com/design/spec/components/…
ZimaXXX

非推奨
マカランド

1
@Makarand True。デザインライブラリはメンテナンスされていませんが、5年前にこの質問に回答しました。いずれにしても、andriodxの詳細で回答を更新しました。
Gabriele Mariotti

1

それは私を追加して解決しました

xmlns:card_view = "http://schemas.android.com/apk/res-auto"

例えば:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    card_view:cardCornerRadius="5dp">

0

カードビューにapp:cardElevation = "8dp"属性を追加しているので、次のようになります。

<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="160dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        app:cardElevation="8dp"
        app:cardCornerRadius="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scaleType="centerCrop"
            android:src="@drawable/kmp_warna1" />

    </android.support.v7.widget.CardView>

それが役に立てば幸い

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.