我正在尝试更改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_activatedandroid: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更改背景色?-LMLPHP

关于android - 如何根据是否选择CardView更改背景色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62943631/

10-13 07:54