我正在尝试更改CardView
的颜色,具体取决于是否选中
我试过了,这是我的card_view_color.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:color="#ABEBC6"/> <!-- selected -->
<item android:state_selected="false"
android:color="#FFFFFF"/> <!-- not selected -->
</selector>
这是我的CardView
:<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:cardBackgroundColor="@color/card_view_color"
android:id="@+id/cardViewMetric">
</androidx.cardview.widget.CardView>
还尝试了android:state_activated
,android:state_checked
,结果相同,无法正常工作。我也有一个
onClickListener
(Kotlin):holder.binding.root.setOnClickListener{
val GREEN_COLOR = Color.parseColor("#ABEBC6")
holder.binding.cardViewMetric.setCardBackgroundColor(GREEN_COLOR)
}
具有这种当前行为。我想要的通缉行为是只有一个CardView会被上色,如果我选择另一个,则那个会是绿色,而先前的选择会是白色。
最佳答案
您可以在 Material 组件库中使用 MaterialCardView
。
<com.google.android.material.card.MaterialCardView
...
app:checkedIcon="@null"
android:clickable="true"
android:focusable="true"
android:checkable="true">
</com.google.android.material.card.MaterialCardView>
然后在您的代码中: card.setChecked(true)
MaterialCardView
扩展了androidx.cardview.widget.CardView
,并支持 checking
状态。要自定义颜色,可以使用
app:cardForegroundColor
属性: <com.google.android.material.card.MaterialCardView
app:cardForegroundColor="@color/card_selector"
与:<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:alpha="...." android:color="@color/..." android:state_checked="true"/>
<item android:alpha="...." android:color="@color/..." app:state_dragged="true"/>
<item android:color="@android:color/transparent" android:state_checked="false" app:state_dragged="false"/>
</selector>
或者您可以覆盖卡中的colorPrimary
: <com.google.android.material.card.MaterialCardView
android:id="@+id/card"
style="@style/Widget.MaterialComponents.CardView"
与:<style name="ThemeOverlay.CardView" parent="">
<item name="colorPrimary">@color/....</item>
</style>
默认情况下,选中的卡的右上角还会有一个选中的图标。您可以使用app:checkedIcon
属性对其进行自定义,也可以使用app:checkedIcon="@null"
隐藏它。关于android - 如何根据是否选择CardView更改背景色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62943631/