【译】Android材质组件的动手实践:Cards

本文为 Nick Rout 发布于 Medium 的文章译文(Google 翻译)
原文链接为 Hands-on with Material Components for Android: Cards
本文仅作为个人学习记录所用。如有涉及侵权,请相关人士尽快联系译文作者。


Android MDC 系列文章:


这篇文章将介绍 Cards 组件的功能和API。要了解如何处理Android的Material Components的初始设置(包括Gradle依赖关系和创建应用程序主题),请参阅我的原始文章:

为Android设置Material Components主题

卡片是表面材料,包含与单个主题相关的内容和动作。此内容可能包括文本,图像,链接等,并且大小可能有所不同。尽管在内容布局方面有许多模式和变化形式,但是唯一需要的元素是卡片容器。

Card

基本用法🏁

MaterialCardView 可以在您的布局中添加,如下所示:

< FrameLayout 
  ... > 

  < com.google.android.material.card.MaterialCardView 
    android:id =“ @ + id / card” 
    android:layout_width =“ match_parent” 
    android:layout_height =“ wrap_content” > 
    <!-- Card Content --> 
  </ com.google.android.material.card.MaterialCardView>
 </ FrameLayout >

检查☑️

MaterialCardView可以检查A 以指示选择。没有启用/禁用选中状态的默认行为。例如,这可以响应长按来完成。

首先,需要启用可检查行为:

< com.google.android.material.card.MaterialCardView 
  ... 
  android:clickable =“ true” 
  android:focusable =“ true” 
  android:checkable =“ true” >

然后,我们可以切换选中状态(以下示例是对长按的响应):

card.setOnLongClickListener {
    card.isChecked = !card.isChecked
    true
}

用户界面的更改包括叠加层颜色和选中的图标:

Material Card View 选中状态

可以使用checkedIcon属性更改选中的图标。各种颜色选项将在下面的“主题”部分中讨论。

有关使用RecyclerView选择的高级检查示例,请参见《Android材料组件》目录

拖动并滑动以消除☝️

MaterialCardView内置支持特定于拖动的状态更改。与检查一样,不存在默认行为来实现拖动本身。推荐的方法是使用,ViewDragHelper并且Android的材料组件目录包含一个方便的实现类;DraggableCoordinatorLayout

注意:如果将其*DraggableCoordinatorLayout*包含在Android的核心Material Components库中,则无需复制类就可以使用它。在撰写本文时,适用于Android的材料组件的最新版本已经发布,*1.2.0-alpha05*事实并非如此。您可以在问题跟踪器上为此功能 加注星标。

首先,我们需要将父容器更改为DraggableCoordinatorLayout

< io.material.catalog.draggable.DraggableCoordinatorLayout 
  android:id =“ @ + id / parentContainer” 
  ... > 

  < com.google.android.material.card.MaterialCardView 
    ... > 
    <!-- Card Content --> 
</ com.google.android.material.card.MaterialCardView>
</ io.material.catalog.draggable.DraggableCoordinatorLayout >

然后,我们可以添加回调并切换拖动状态:

parentContainer.addDraggableChild(card)
parentContainer.setViewDragListener(object
    : DraggableCoordinatorLayout.ViewDragListener {

    override fun onViewCaptured(view: View, pointerId: Int) {
        card.isDragged = true
    }

    override fun onViewReleased(view: View, vX: Float, vY: Float) {
        card.isDragged = false
    }
})

UI更改包括叠加颜色和(动画)增加的高程:

处于拖动状态的MaterialCardView

有关使用RecyclerView拖放的高级拖动示例,请参见Android材料组件目录

有关使用的高级滑动擦除示例SwipeDismissBehavior,请参见Android材料组件目录

主题🎨

可以根据三个“材质主题”子系统对卡片进行主题设置:颜色版式形状。实施全局卡片样式时,请扩展Widget.MaterialComponents.CardView样式并在您的应用程序主题中使用materialCardViewStyle属性进行引用。

颜色

可以使用该cardBackgroundColor属性自定义卡片背景的颜色。默认为colorSurface

如上所述,卡的前景色用于指示选中和拖动状态。因此,这需要一个ColorStateList,表示需要<selector>用于已检查/已拖拽状态。它通常是透明的,但使用颜色表示检查/拖动,默认为colorPrimary(选中)/ colorOnSurface(拖动),每个状态的不透明度不同。

可以使用该checkedIconTint属性自定义选中图标的色调颜色。默认为colorPrimary

可以使用该strokeColor属性自定义可选纸牌笔触的颜色。默认情况下禁用。

最后,可以使用rippleColor属性来自定义卡片触摸波纹的颜色。它也接受a ColorStateList并默认为colorOnSurface(unchecked)/ colorPrimary(checked),每个状态的不透明性不同。

颜色主题

版式

没有主要文字作为卡组件的一部分。卡片内容中包含的文本将根据使用的类/组件以及fontFamily应用程序主题属性设置样式。

字体样式主题

形状

可以使用该shapeAppearance属性自定义卡片背景的形状。默认为shapeAppearanceMediumComponent

可以使用该cardElevation属性自定义卡的海拔。默认为1dp。

有趣的是,卡当前形状外观的边角大小可以在0.0到1.0之间进行插值。这在动画和过渡中很有用。为此使用MaterialCardView#setProgressMaterialCardView#getProgress

尽管不是严格地确定主题形状,但是值得一提的是,可以使用该strokeWidth属性来调整可选纸牌笔触的宽度。默认值为0dp(如果strokeColor设置为no ,则无论宽度如何都不会渲染)。

形状主题

更多资源📚


希望本文能对Cards及其在Android应用中的使用方式有所帮助。如果您有任何疑问,想法或建议,那么我很乐意收到您的来信!

在Twitter上找到我@ricknout

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容