日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android CardView 开发过程中要注意的细节

發(fā)布時(shí)間:2025/4/16 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android CardView 开发过程中要注意的细节 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文出處:http://www.codeceo.com/article/android-cardview.html

2014 年,隨著 Google 推出了全新的設(shè)計(jì)語(yǔ)言 Material Design,還迎來(lái)了新的 Android 支持庫(kù) v7,其中就包含了 Material Design 設(shè)計(jì)語(yǔ)言中關(guān)于 Card 卡片概念的實(shí)現(xiàn) ——?Cardview。經(jīng)歷了相當(dāng)長(zhǎng)的一段時(shí)間相信許多 Android 開(kāi)發(fā)者都已經(jīng)應(yīng)用了這個(gè)控件,現(xiàn)在才寫(xiě)這篇文章可能有點(diǎn)晚,但對(duì)于剛剛開(kāi)始使用的開(kāi)發(fā)者以及其他已經(jīng)使用了一段時(shí)間但做出來(lái)效果不好的同學(xué)應(yīng)該能幫上點(diǎn)小 忙。

正題開(kāi)始~

◆ 注意不同 SDK 版本(低于 Lollipop 21)上的邊距(Margin)效果

Google 在 Android Lollipop 中引入了 Material Design 設(shè)計(jì)中的陰影(Elevation)和 Z 軸位移,其目的就是突出界面中不同元素之間的層次關(guān)系。為了統(tǒng)一不同系統(tǒng)版本的視覺(jué)效果,Google 針對(duì) SDK 21 以下的系統(tǒng)給 CardView 加入一個(gè) Elevation 兼容(即 XML 中的 app:cardElevation 和 Java 代碼中的 setCardElevation)。

然而,在低版本中設(shè)置了 CardElevation 之后 CardView 會(huì)自動(dòng)留出空間供陰影顯示,而 Lollipop 之后則需要手動(dòng)設(shè)置 Margin 邊距來(lái)預(yù)留空間,導(dǎo)致我在設(shè)置 Margin 在 Android 5.x 機(jī)器上調(diào)試好后,在 Kitkat 機(jī)器調(diào)試時(shí)發(fā)現(xiàn)邊距非常大,嚴(yán)重地浪費(fèi)了屏幕控件。

因此,我們需要自定義一個(gè) dimen 作為 CardView 的 Margin 值:

  • 創(chuàng)建 /res/value 和 /res/value-v21 資源文件夾于項(xiàng)目對(duì)應(yīng) Module 目錄下,前者放置舊版本/通用的資源文件(了解的可以跳過(guò)),后者放置 21 及更高 SDK 版本的資源文件。
  • 在 value 內(nèi)的 dimen.xml 創(chuàng)建一個(gè) Dimension (<dimen> 屬性),隨便命個(gè)名(如 xxx_card_margin)并填入數(shù)值 0dp。
  • 接著在 value-v21 文件夾內(nèi)的 dimen.xml 創(chuàng)建名字相同的 Dimension,并填入你期望的預(yù)留邊距(一般和 CardElevation 陰影大小相同)
  • 最后,在你布局中的 CardView 中設(shè)置android:layout_margin=”@dimen/xxx_card_margin”
  • 這樣依賴(lài)就解決了低版本中邊距過(guò)大或者視覺(jué)效果不統(tǒng)一的問(wèn)題了。

    ◆ 為你的 Card 添加點(diǎn)擊效果

    當(dāng)使用 CardView 的場(chǎng)合是作為列表中的一個(gè) Item 且直接單擊 Item 有相應(yīng)的操作,那么就有必要加上視覺(jué)反饋來(lái)告訴用戶(hù)這個(gè) Card 是可點(diǎn)擊的。

    (此處用其他例子代替 CardView 演示)

    如果你是用了 AppCompat v7 支持庫(kù):

    那么你可以直接給 CardView 加上?android:foreground=”?attr/selectableItemBackground” 這個(gè)屬性會(huì)在 Lollipop 上自動(dòng)加上 Ripple 效果,在舊版本則是一個(gè)變深/變亮的效果。

    如果你沒(méi)使用這個(gè)支持庫(kù)或者覺(jué)得這個(gè)效果在舊版本顯得有點(diǎn)僵硬:你可以嘗試自定義一個(gè) Drawable,和上一條一樣根據(jù)不同 SDK 版本分別編寫(xiě)不同的效果,在此就不多介紹自定義 Drawable 的方法。

    ◆ 讓點(diǎn)擊效果更加貼近 Material Design

    上面曾提到過(guò)一個(gè)概念:Z 軸位移,即決定元素層次的深度,與 Elevation 大小相加構(gòu)成實(shí)際顯示的陰影深度。

    在 Material Design Guidelines 中有建議卡片、按鈕這類(lèi)元素觸摸時(shí)應(yīng)當(dāng)有一個(gè)浮起的效果,也就是增大 Z 軸位移(設(shè)計(jì)緣由可以參照 NovaDNG 在知乎的回答:?http://www.zhihu.com/question/27494839/answer/36865959?)

    要實(shí)現(xiàn)這個(gè)效果并不難,我們只需要借助 Lollipop 的一個(gè)新屬性android:stateListAnimator(PS:這也意味著這個(gè)方法不可以用于舊版本系統(tǒng)QAQ)

    首先,創(chuàng)建一個(gè) TranslationZ 的變換動(dòng)畫(huà)放在 /res/anim,自己取一個(gè)名(如 touch_raise.xml),加入以下內(nèi)容:

    <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_enabled="true" android:state_pressed="true"><objectAnimatorandroid:duration="@android:integer/config_shortAnimTime"android:propertyName="translationZ"android:valueTo="@dimen/touch_raise"android:valueType="floatType" /></item><item><objectAnimatorandroid:duration="@android:integer/config_shortAnimTime"android:propertyName="translationZ"android:valueTo="0dp"android:valueType="floatType" /></item> </selector>

    然后為你需要添加效果的 CardView(其他 View 同理)所在的 Layout XML 復(fù)制多一份到 /res/layout-v21,然后在新的那份 XML 的 CardView 中加入屬性android:stateListAnimator=”@anim/touch_raise”。
    這樣,你的卡片按住時(shí)就會(huì)有浮起(陰影加深)的效果了。

    ◆ 盡量不要用作固定高度的 List Item

    除了橫向滾動(dòng)列表和類(lèi)似 Google Play 音樂(lè)中的帶封面圖片卡片 Item,其他地方應(yīng)該盡量避免做固定高度的卡片。舉一個(gè)錯(cuò)誤例子,我之前寫(xiě)的快遞查詢(xún)應(yīng)用「水表助手」,快遞卡片就是用了固定寬度(誤人子弟系列QAQ)

    不需要用卡片的地方也不應(yīng)該使用,濫用只會(huì)讓用戶(hù)更快地厭倦你的界面設(shè)計(jì)。

    (這個(gè)是復(fù)制自官方的?錯(cuò)誤?范例)

    ◆ 低版本(低于 Lollipop)的 setElevation 不是萬(wàn)能的

    由于缺少一些系統(tǒng) API(如 RenderThread),CardView 中的 Elevation 兼容實(shí)現(xiàn)并不完美,和真正的實(shí)現(xiàn)方法還是有較大的差距(不是指效果),所以調(diào)用 setCardElevation 也不能隨心所欲地傳入一個(gè) Float 型,在低版本系統(tǒng)使用時(shí)應(yīng)當(dāng)處理一下傳入的數(shù)值(似乎只能是整數(shù),碰到過(guò)錯(cuò)誤但是沒(méi)詳細(xì)研究……懶癌請(qǐng)?jiān)?#xff09;或加上 try-catch (不推薦)。

    除了本文提到的五個(gè)點(diǎn),CardView 還有許多需要注意的地方,在這里就不一一列舉了~

    對(duì)于實(shí)現(xiàn) Material Design 卡片,CardView 并不是唯一的選擇,也有人通過(guò)自己寫(xiě) Drawable、Layout 來(lái)實(shí)現(xiàn)出性能更好的卡片效果,但對(duì)在這方面不擅長(zhǎng)的同學(xué)來(lái)說(shuō) CardView 算是最好的選擇,畢竟是 Google 自家的東西,在效果、兼容性方面都十分到位。

    《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的Android CardView 开发过程中要注意的细节的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 色桃av | 精品国产91乱码一区二区三区 | 床戏高潮呻吟声片段 | 国产日韩一区二区 | 亚洲性xxxx | 日韩怡春院 | 五月天激情婷婷 | 中国女人性猛交 | 免费毛片网站 | 国产情侣小视频 | 日韩久久久久久久久久久 | 亚洲视频一区二区 | 国产艳情片 | 亚洲视频在线观看一区 | 亚洲爽爆 | 久久精品在线免费观看 | 国产男男chinese网站 | 国产黄在线播放 | 国产精品一区av | 午夜精产品一区二区在线观看的 | 国产精品天美传媒入口 | 91午夜在线 | 亚州男人的天堂 | 成人小视频在线观看 | 色吊丝av中文字幕 | 午夜院线| 色播五月婷婷 | 国产精品黄色大片 | 黄色网址在线看 | 人体裸体bbbbb欣赏 | 超清av| 性感美女在线观看 | aaa毛片视频| 中文字幕蜜桃 | 亚洲精品久久久久av无码 | 国产v亚洲| 91av免费 | 91免费观看网站 | 熟妇高潮一区二区高潮 | 激情黄色小视频 | 影院色原网站 | 国产看真人毛片爱做a片 | 牛牛av国产一区二区 | 性感av在线 | 污站在线观看 | 免费黄色av网址 | 全部免费毛片在线播放高潮 | www.浪潮av.com | 草久久免费视频 | 天堂网8| 国产美女喷水视频 | 国语对白做受xxxxx在线中国 | 日日干影院 | 免费裸体美女网站 | 先锋影音av资源在线 | 97人人超 | 夜夜躁狠狠躁日日躁av | 色九九视频| 久久美 | 日韩精品中文字幕在线观看 | 91jk制服白丝超短裙大长腿 | 国偷自产av一区二区三区麻豆 | 国产国产乱老熟女视频网站97 | 亚洲高清无码久久久 | 国产午夜一级一片免费播放 | 大地资源中文第三页 | 成人青青草| 中文字幕一区二区三区精彩视频 | 久久桃色 | 红桃视频在线播放 | 欧美www在线观看 | 伊人狠狠干| 夜夜草天天干 | av2014天堂网 | 在线免费国产视频 | 国产主播专区 | 日老女人视频 | 久久午夜免费视频 | 成人网站在线进入爽爽爽 | 1024亚洲| 蜜臀久久99精品久久久无需会员 | 在线看片| 深夜福利成人 | 樱花影院最新免费观看攻略 | 囯产精品久久久久久 | 香蕉视频色版 | 国产精品美女久久久久 | 免费伊人网| 在线免费观看视频黄 | 韩漫动漫免费大全在线观看 | 午夜网址 | 韩国三级在线播放 | 欧美成人国产va精品日本一级 | 操屁股视频 | 国产欧美在线观看视频 | 欧美激情精品久久久久久 | 又黄又刺激的视频 | 九色视频在线播放 | 五月激情天 |