android - 如何根据是否选择CardView更改背景色?

标签 android kotlin android-cardview material-components-android materialcardview

我正在尝试更改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"隐藏它。
enter image description here

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

相关文章:

android - 为什么使用 ViewBinding 而不是 DataBinding?

android - 将内容添加到 Android DialogFragment 的背景

android - ViewPager 滚动不流畅

android - 无法确定任务 ':app:dokka' 的依赖关系

android - CardView 未呈现或数据未显示在 Recyclerview 中

material-design - 水平滚动卡就像 Android 中 Lollipop 的最新应用程序一样?

java - 使用 Android Studio 进行 GitHub 协作

kotlin - 如何使数据类(Kotlin)从父类(super class)扩展并继承父类(super class)字段之一?

android - KOTLIN-BottomNavigationBar中的第一项不可见,标题问题

android - CardView 忽略 android :clipChildren ="false"