150

CardViewには、背景色を定義する属性があります。card_view:cardBackgroundColorこの属性は正常に機能します。

同時に、色を動的に変更する方法はありません。

次のような解決策を試しました:

mCardView.setBackgroundColor(...);

またはcardView内でレイアウトを使用する

   <android.support.v7.widget.CardView>
        <LinearLayout
            android:id="@+id/inside_layout">
    </android.support.v7.widget.CardView>  

 View insideLayout = mCardView.findViewById(R.id.inside_layout);
 cardLayout.setBackgroundColor(XXXX);

カードに cardCornerRadius があるため、これらのソリューションは機能しません。

4

20 に答える 20

299

あなたが探しているものは次のとおりです。

CardView card = ...
card.setCardBackgroundColor(color);

XML で

 card_view:cardBackgroundColor="@android:color/white"

更新: XML

app:cardBackgroundColor="@android:color/white"
于 2014-11-24T08:05:10.390 に答える
115

プロパティ card_view:cardBackgroundColor を使用します。

<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="fill_parent"
    android:layout_height="150dp"
    android:layout_gravity="center"
    card_view:cardCornerRadius="4dp"
    android:layout_margin="10dp"
    card_view:cardBackgroundColor="#fff"
    >
于 2015-03-19T00:17:40.420 に答える
19

このコードを使用して、プログラムで設定しました。

card.setCardBackgroundColor(color);

または、XML では次のコードを使用できます。

card_view:cardBackgroundColor="@android:color/white"
于 2015-04-10T11:21:27.153 に答える
10

メソッドで設定するinitialize方法では、次のように保護されたRoundRectDrawableクラスを使用します。

RoundRectDrawable backgroundDrawable = new RoundRectDrawable(backgroundColor, cardView.getRadius());
cardView.setBackgroundDrawable(backgroundDrawable);

きれいではありませんが、そのクラスを拡張できます。何かのようなもの:

package android.support.v7.widget;

public class MyRoundRectDrawable extends RoundRectDrawable {

    public MyRoundRectDrawable(int backgroundColor, float radius) {
        super(backgroundColor, radius);
    }

}

それから:

final MyRoundRectDrawable backgroundDrawable = new MyRoundRectDrawable(bgColor,
            mCardView.getRadius());
mCardView.setBackgroundDrawable(backgroundDrawable);

編集

これは < API 21 の影を与えないので、RoundRectDrawableWithShadow.

これを行うためのより良い方法はないようです。

于 2014-10-25T10:14:33.580 に答える
3

ジャワ

cardView.setCardBackgroundColor(0xFFFEFEFE);

Android は ARGB カラーを使用します。この (0xFF + RGB COLOR) のように使用できます-ハードコードされた色。

于 2016-02-11T20:31:48.853 に答える
2

プログラムでカードビューを作成しようとしているときに同じ問題に遭遇しました。奇妙なのは、ドキュメントhttps://developer.android.com/reference/android/support/v7/widget/CardView.html#setCardBackgroundColor%28intを見ることです%29、Google の担当者はカード ビューの背景色を変更するための API を公開しましたが、奇妙なことに、サポート ライブラリでアクセスできませんでした。

CardViewBuilder.java

    mBaseLayout = new FrameLayout(context);
    // FrameLayout Params
    FrameLayout.LayoutParams baseLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    mBaseLayout.setLayoutParams(baseLayoutParams);

    // Create the card view.
    mCardview = new CardView(context);
    mCardview.setCardElevation(4f);
    mCardview.setRadius(8f);
    mCardview.setPreventCornerOverlap(true); // The default value for that attribute is by default TRUE, but i reset it to true to make it clear for you guys
    CardView.LayoutParams cardLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    cardLayoutParams.setMargins(12, 0, 12, 0);
    mCardview.setLayoutParams(cardLayoutParams);
    // Add the card view to the BaseLayout
    mBaseLayout.addView(mCardview);

    // Create a child view for the cardView that match it's parent size both vertically and horizontally
    // Here i create a horizontal linearlayout, you can instantiate the view of your choice
    mFilterContainer = new LinearLayout(context);
    mFilterContainer.setOrientation(LinearLayout.HORIZONTAL);
    mFilterContainer.setPadding(8, 8, 8, 8);
    mFilterContainer.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER));

    // And here is the magic to get everything working
    // I create a background drawable for this view that have the required background color
    // and match the rounded radius of the cardview to have it fit in.
    mFilterContainer.setBackgroundResource(R.drawable.filter_container_background);

    // Add the horizontal linearlayout to the cardview.
    mCardview.addView(mFilterContainer);

filter_container_background.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="8dp"/>
<solid android:color="@android:color/white"/>

そうすることで、カードビューの影と角を丸くすることに成功しました。

于 2014-11-27T17:52:12.410 に答える
1

私はついに角をとどめました。これは、C#、Xamarin.Android です。

ビューホルダー:

CardView = itemView.FindViewById<CardView>(Resource.Id.cdvTaskList);

アダプターで:

vh.CardView.SetCardBackgroundColor(Color.ParseColor("#4dd0e1"));
于 2019-05-10T06:01:51.623 に答える
0

Cardview少し恥ずかしがり屋です。構造に色のリストがあり、モデルは次のようになります

class ModelColor : Serializable {

var id: Int? = 0
var title: String? = ""
var color: Int? = 0// HERE IS THE COLOR FIELD WE WILL USE

constructor(id: Int?, title: String?, color: Int?) {
    this.id = id
    this.title = title
    this.color = color
}

}

モデルに色をロードし、構成の最後の項目を次から取得しますR.color

 list.add(ModelColor(2, getString(R.string.orange), R.color.orange_500))

そして最後に、BackgrıundResourceを設定できます

 cv_add_goal_choose_color.setBackgroundResource(color)
于 2018-10-11T08:57:33.220 に答える