【问题标题】:How to make a CardView have a clickable&checkable effect, and how to make it dark themed?如何使 CardView 具有可点击和可检查的效果,以及如何使其成为深色主题?
【发布时间】:2015-11-07 18:35:01
【问题描述】:

背景

在引入 CardView 之前,我在 my app 上做了一些选择器来模仿卡片,并让用户也可以选择应用程序使用的主题(有些人更喜欢深色主题):

问题

我想让它看起来和工作起来更自然,所以我尝试使用 CardView。

遗憾的是,我不明白如何设置 CardView 具有可点击和可检查的效果(每个平台的原生,可能具有不同的颜色),并且还能够将其设置为深色主题。

问题

  1. 如何使 CardView 具有可点击效果?在 Lollipop 上,这是一种连锁反应。在以前的版本中,它在 CardView 的边界内是全色变化的。我也想自定义可点击效果的颜色,让它也可以勾选。

  2. 如何制作深色主题 CardView ?

【问题讨论】:

  • 在深色主题模式下,您必须自定义主题和特别的阴影/高度颜色以在应用 UI 中显示对比度
  • 我最近使用这个答案作为指南实现了可点击的 CardView 功能:stackoverflow.com/questions/24475150/…
  • @DanielNugent 看起来不错。你知道 cardCornerRadius 和 contentPadding 标准应该是什么吗?是否也可以使 cardView 具有“已检查”状态?
  • 我必须调整这些值以使其完美,它会根据您的 CardView 布局而有所不同。我使用了 CardViews 的 ListView,效果很好。至于“选定”状态,我的解决方案有点混乱,但它有效。我在长按时手动“选择”了一个 CardView,然后保留对所选视图的引用,以确保即使在使用视图持有者模式重复使用单元格时它也显示为选中状态。
  • @DanielNugent 我成功添加了可检查状态,使用这个:stackoverflow.com/questions/11775710/…,并将 state_checked 添加到 card_foreground.xml 的选择器中。但是,因为是前景,所以会改变卡片的内容,所以如果我选择完全不透明的颜色,它会隐藏卡片的全部内容。

标签: android material-design android-theme android-cardview android-design-library


【解决方案1】:

你必须使用 CardView.Dark 风格的深色主题 CardView。您也可以只使用bug 的第 11 和第 12 厘米中提到的颜色。

【讨论】:

    【解决方案2】:

    这是在谷歌上通过https://code.google.com/p/android/issues/detail?id=194497请求的

    但在 Android 支持库发布后,修订版 23.2.1(2016 年 3 月)添加了此功能。

    为 CardView 添加深色主题

    将支持库更新为Android Support Library to 23.2.1

    示例:

    将以下属性添加到您的卡片视图

    style="@style/CardView.Dark"
    

    如图所示

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:id="@+id/cards"
            style="@style/CardView.Dark"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            card_view:cardCornerRadius="4dp">
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentBottom="true"
                android:padding="10dp">
    
                <TextView
                    android:id="@+id/usersName"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentTop="true"
                    android:paddingTop="10dp"
                    android:text="Username"
                    android:textColor="#FFFFFF" />
    
                <TextView
                    android:id="@+id/others"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/usersName"
                    android:layout_centerVertical="true"
                    android:paddingTop="10dp"
                    android:text="Others"
                    android:textColor="#FFFFFF" />
    
            </RelativeLayout>
        </android.support.v7.widget.CardView>
    </LinearLayout>
    

    【讨论】:

    • 请求是我提出的 :) 但是我该如何使用呢?
    • 请检查我更新的答案。 @androiddeveloper 我在其中添加了示例。
    • 其实我很久以前就已经解决了(它在我的应用程序中),但也许你的更好或更官方。您在代码中的哪个位置处理卡片的状态(按下、选中/选择...)?
    • 我已经测试过 isPressed(); .isSelected();正在工作。
    猜你喜欢
    • 2020-05-25
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2018-05-29
    相关资源
    最近更新 更多