Android 04 layer-list的用法總結(jié)

Android layer-list的用法總結(jié)
目錄介紹

  • 1.思考
  • 2.layer-list代碼實現(xiàn)效果

好消息

  • 博客筆記大匯總【16年3月到至今】昆稿,包括Java基礎(chǔ)及深入知識點(diǎn)鹊杖,Android技術(shù)博客冲簿,Python學(xué)習(xí)筆記等等,還包括平時開發(fā)中遇到的bug匯總网严,當(dāng)然也在工作之余收集了大量的面試題轨淌,長期更新維護(hù)并且修正碑隆,持續(xù)完善……開源的文件是markdown格式的插掂!同時也開源了生活博客灰瞻,從12年起,積累共計47篇[近20萬字]辅甥,轉(zhuǎn)載請注明出處,謝謝燎竖!
  • 鏈接地址:https://github.com/yangchong211/YCBlogs
  • 如果覺得好璃弄,可以star一下,謝謝构回!當(dāng)然也歡迎提出建議夏块,萬事起于忽微疏咐,量變引起質(zhì)變!

1.思考脐供?
問題:上圖Tab的背景效果浑塞,和帶陰影的圓角矩形,是怎么實現(xiàn)的呢政己?
大部分的人會讓美工切圖酌壕,用點(diǎn)九圖做背景。但是歇由,如果只提供一張圖卵牍,會怎么樣呢?
比 如沦泌,中間的Tab背景紅色底線的像素高度為4px糊昙,那么,在mdpi設(shè)備上顯示會符合預(yù)期谢谦,在hdpi設(shè)備上顯示時會細(xì)了一點(diǎn)點(diǎn)释牺,在xhdpi設(shè)備上時會再細(xì)一點(diǎn),在xxhdpi上顯示時又細(xì)了回挽,在xxxhdpi上顯示時則更細(xì)了没咙。因為在xxxhdpi上,1dp=4px厅各,所以镜撩,4px的圖,在 xxxhdpi設(shè)備上顯示時队塘,就只剩下1dp了袁梗。所以,為了適配好各種分辨率憔古,必須提供相應(yīng)的多套圖片遮怜。如果去查看android的res源碼資源,也會 發(fā)現(xiàn)鸿市,像這種Tab的背景點(diǎn)九圖锯梁,也根據(jù)不同分辨率尺寸提供了不同尺寸的點(diǎn)九圖片。

2.layer-list代碼
但是焰情,在這個demo里陌凳,都沒有用到任何實際的圖片資源,都是用shape内舟、selector合敦,以及本篇要講解的layer-list完成的。
使用layer-list可以將多個drawable按照順序?qū)盈B在一起顯示验游,像上圖中的Tab充岛,是由一個紅色的層加一個白色的層疊在一起顯示的結(jié)果保檐, 陰影的圓角矩形則是由一個灰色的圓角矩形疊加上一個白色的圓角矩形。先看下代碼吧崔梗,以下是Tab背景的代碼:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 第一種加載方式 -->
<!--<item android:drawable="@drawable/bg_tab_selected" android:state_checked="true" />-->
<!-- 第二種加載方式 -->
<item android:state_checked="true">
<layer-list>
<!-- 紅色背景 -->
<item>
<color android:color="#E4007F" />
</item>
<!-- 白色背景 -->
<item android:bottom="4dp" android:drawable="@android:color/white" />
</layer-list>
</item>
<item>
<layer-list>
<!-- 紅色背景 -->
<item>
<color android:color="#E4007F" />
</item>
<!-- 白色背景 -->
<item android:bottom="1dp" android:drawable="@android:color/white" />
</layer-list>
</item>
</selector>

以下是帶陰影的圓角矩形:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 灰色陰影 -->
<item
android:left="2dp"
android:top="4dp">
<shape>
<solid android:color="@android:color/darker_gray" />
<corners android:radius="10dp" />
</shape>
</item>
<!-- 白色前景 -->
<item
android:bottom="4dp"
android:right="2dp">
<shape>
<solid android:color="#FFFFFF" />
<corners android:radius="10dp" />
</shape>
</item>
</layer-list>

從上面的示例代碼可以看到夜只,layer-list可以作為根節(jié)點(diǎn),也可以作為selector中item的子節(jié)點(diǎn)蒜魄。
layer-list可以添加多個item子節(jié)點(diǎn)扔亥,每個item子節(jié)點(diǎn)對應(yīng)一個drawable資源,按照item從上到下的順序疊加在一起权悟,
再通過設(shè)置每個item的偏移量就可以看到 陰影等效果了砸王。layer-list的item可以通過下面四個屬性設(shè)置偏移量:

android:top 頂部的偏移量
android:bottom 底部的偏移量
android:left 左邊的偏移量
android:right 右邊的偏移量
  • 這四個偏移量和控件的margin設(shè)置差不多,都是外間距的效果峦阁。如何不設(shè)置偏移量谦铃,前面的圖層就完全擋住了后面的圖層,
  • 從而也看不到后面的圖層效 果了榔昔。比如上面的例子驹闰,Tab背景中的白色背景設(shè)置了android:bottom之后才能看到一點(diǎn)紅色背景。
  • 那么如果偏移量設(shè)為負(fù)值會怎么樣呢撒会?經(jīng)過驗證嘹朗,偏移超出的部分會被截掉而看不到,不信可以自己試一下诵肛。有時候這很有用屹培,比如當(dāng)我想顯示一個半圓的時候。

另外怔檩,關(guān)于item的用法褪秀,也做下總結(jié):

    1. 根節(jié)點(diǎn)不同時,可設(shè)置的屬性是會不同的薛训,比如selector下媒吗,可以設(shè)置一些狀態(tài)屬性,而在layer-list下乙埃,可以設(shè)置偏移量闸英;
    1. 就算父節(jié)點(diǎn)同樣是selector,放在drawable目錄和放在color目錄下可用的屬性也會不同介袜,比如drawable目錄下可用的屬性為android:drawable甫何,在color目錄下可用的屬性為android:color;
    1. item的子節(jié)點(diǎn)可以為任何類型的drawable類標(biāo)簽遇伞,除了上面例子中的shape沛豌、color、layer-list赃额,也可以是 selector加派,還有其他沒講過的bitmap、clip跳芳、scale芍锦、inset、transition飞盆、rotate娄琉、animated- rotate、lever-list等等吓歇。

其他
知乎:https://www.zhihu.com/people/yang-chong-69-24/pins/posts
領(lǐng)英:https://www.linkedin.com/in/chong-yang-049216146/
簡書:http://www.reibang.com/u/b7b2c6ed9284
csdn:http://my.csdn.net/m0_37700275
網(wǎng)易博客:http://yangchong211.blog.163.com/
新浪博客:http://blog.sina.com.cn/786041010yc
github:https://github.com/yangchong211
喜馬拉雅聽書:http://www.ximalaya.com/zhubo/71989305/
脈脈:yc930211
開源中國:https://my.oschina.net/zbj1618/blog

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末孽水,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子城看,更是在濱河造成了極大的恐慌女气,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件测柠,死亡現(xiàn)場離奇詭異炼鞠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)轰胁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門谒主,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赃阀,你說我怎么就攤上這事霎肯。” “怎么了榛斯?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵观游,是天一觀的道長。 經(jīng)常有香客問我肖抱,道長备典,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任意述,我火速辦了婚禮提佣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荤崇。我一直安慰自己拌屏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布术荤。 她就那樣靜靜地躺著倚喂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上端圈,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天焦读,我揣著相機(jī)與錄音,去河邊找鬼舱权。 笑死矗晃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宴倍。 我是一名探鬼主播张症,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸵贬!你這毒婦竟也來了俗他?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤阔逼,失蹤者是張志新(化名)和其女友劉穎兆衅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颜价,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涯保,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了周伦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夕春。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖专挪,靈堂內(nèi)的尸體忽然破棺而出及志,到底是詐尸還是另有隱情,我是刑警寧澤寨腔,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布速侈,位于F島的核電站,受9級特大地震影響迫卢,放射性物質(zhì)發(fā)生泄漏倚搬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一乾蛤、第九天 我趴在偏房一處隱蔽的房頂上張望每界。 院中可真熱鬧,春花似錦家卖、人聲如沸眨层。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趴樱。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叁征,已是汗流浹背纳账。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留航揉,地道東北人塞祈。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像帅涂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尤蛮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容