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があるため、これらの解決策は機能しません。
あなたが探しているのは、
CardView card = ...
card.setCardBackgroundColor(color);
XMLで
card_view:cardBackgroundColor="@Android:color/white"
プロパティ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"
>
これをXMLで使用できます
card_view:cardBackgroundColor="@Android:color/white"
あるいはJavaではこれ
cardView.setCardBackgroundColor(Color.WHITE);
私はプログラム的に設定するためにこのコードを使いました:
card.setCardBackgroundColor(color);
XMLでは、このコードを使用できます。
card_view:cardBackgroundColor="@Android:color/white"
これは少し遅れていますが、これはプログラムではないため、トピックから部分的に外れていますが、ウィジェットのスタイルを設定するのが最善であり、CardView
に対してこれを行うことができます。
<style name="MyCardViewStyle" parent="CardView">
<!-- Card background color -->
<item name="cardBackgroundColor">@Android:color/white</item>
<!-- Ripple for API 21 of Android, and regular selector on older -->
<item name="Android:foreground">?android:selectableItemBackground</item>
<!-- Resting Elevation from Material guidelines -->
<item name="cardElevation">2dp</item>
<!-- Add corner Radius -->
<item name="cardCornerRadius">2dp</item>
<item name="Android:clickable">true</item>
<item name="Android:layout_margin">8dp</item>
</style>
これはAndroid.support.v7.widget.CardView
を使用しています
次に、レイアウトファイルでスタイルを設定します。
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.CardView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
style="@style/MyCardViewStyle">
<!-- Other fields-->
</Android.support.v7.widget.CardView>
Android studioを使用して、gradle経由でappcompat-v7ライブラリをインポートする必要があります。
dependencies {
compile 'com.Android.support:appcompat-v7:22.2.0'
}
お役に立てれば。ハッピーコーディング
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);
EDIT
これは<API 21の影をあなたに与えないでしょう、それであなたはRoundRectDrawableWithShadow
で同じことをしなければならないでしょう。
これを行うためのより良い方法はないようです。
私はrecylerViewでCardViewsをフォーマットすることで同様の問題を抱えていました。
私はこの単純な解決策がうまくいった、それが最良の解決策であるかどうかわからないが、それは私のためにうまくいった。
mv_cardView.getBackground().setTint(Color.BLUE)
これはcardViewの背景Drawableを取得してそれを色付けします。
In Java
cardView.setCardBackgroundColor(0xFFFEFEFE);
AndroidはARGBカラーを使用しています。あなたはこのように使うことができます(0xFF + RGB COLOR) - ハードコードされた色。
これはJavaでも使えます。
cardView.setCardBackgroundColor(Color.parseColor( "#cac8a0"));
コードカラーフォーム http://www.color-hex.com/
プログラムでcardviewを作成しようとしているときに私は同じ問題に遭遇した、奇妙なのは、ドキュメントを見ているということです 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"/>
そうすることで私はcardview影と丸みを帯びた角を保つことに成功します。
私は同じ問題を抱えているXamarin.Android - VS(2017)
Solution私にとって役に立ちました:
XMLファイルに以下を追加します。
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
そしてあなたのAndroid.support.v7.widget.CardView
要素にこの妥当性を追加してください:
card_view:cardBackgroundColor="#ffb4b4"
(つまり)
<Android.support.v7.widget.CardView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:layout_margin="12dp"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="1dp"
card_view:cardPreventCornerOverlap="false"
card_view:cardBackgroundColor="#ffb4b4" />
cardElevation
とcardElevation
を追加することもできます。
cardview
プログラムによるを編集したい場合は、このコードを使用する必要があります。For(C#)
cvBianca = FindViewById<Android.Support.V7.Widget.CardView>(Resource.Id.cv_bianca);
cvBianca.Elevation = 14;
cvBianca.Radius = 14;
cvBianca.PreventCornerOverlap = true;
cvBianca.SetCardBackgroundColor(Color.Red);
そして今、あなたは背景色を変えることができますプログラム的に失われた境界線、角の半径と高度なしで。
簡単に試す
<Android.support.v7.widget.CardView
card_view:cardBackgroundColor="#fff"
card_view:cardCornerRadius="9dp"
card_view:cardElevation="4dp"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingTop="10dp"
Android:paddingBottom="10dp"
xmlns:card_view="http://schemas.Android.com/apk/res-auto">
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)
私はようやくコーナーをとどめました。これはc#です、Xamarin.Android
viewHolderでは:
CardView = itemView.FindViewById<CardView>(Resource.Id.cdvTaskList);
アダプタ内:
vh.CardView.SetCardBackgroundColor(Color.ParseColor("#4dd0e1"));
あなたは以下を使用することができます
cardview.setBackgroundColor(Color.parseColor("#EAEDED"));