Android樣式的開發 layer list篇

2021-07-13 10:48:24 字數 2501 閱讀 2966

寫於2015-09-09

android樣式的開發:shape篇

android樣式的開發:selector篇

android樣式的開發:layer-list篇

android樣式的開發:drawable彙總篇

android樣式的開發:view animation篇

android樣式的開發:property animation篇

android樣式的開發:style篇

上圖tab的背景效果,和帶陰影的圓角矩形,是怎麼實現的呢?大部分的人會讓美工切圖,用點九圖做背景。但是,如果只提供一張圖,會怎麼樣呢?比如,中間的tab背景紅色底線的畫素高度為4px,那麼,在mdpi裝置上顯示會符合預期,在hdpi裝置上顯示時會細了一點點,在xhdpi裝置上顯示時會再細一點,在xxhdpi上顯示時又細了,在***hdpi上顯示時則更細了。因為在***hdpi上,1dp=4px,所以,4px的圖,在***hdpi裝置上顯示時,就只剩下1dp了。所以,為了適配好各種解析度,必須提供相應的多套。如果去檢視android的res原始碼資源,也會發現,像這種tab的背景點九圖,也根據不同解析度尺寸提供了不同尺寸的點九。

但是,在這個demo裡,都沒有用到任何實際的資源,都是用shape、selector,以及本篇要講解的layer-list完成的。

使用layer-list可以將多個drawable按照順序層疊在一起顯示,像上圖中的tab,是由乙個紅色的層加乙個白色的層疊在一起顯示的結果,陰影的圓角矩形則是由乙個灰色的圓角矩形疊加上乙個白色的圓角矩形。先看下**吧,以下是tab背景的**:

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=

"">

android:state_checked=

"true"

>

android:color=

"#e4007f"

/>

android:bottom=

"4dp"

android:drawable=

"@android:color/white"

/>

android:color=

"#e4007f"

/>

android:bottom=

"1dp"

android:drawable=

"@android:color/white"

/>

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

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=

"">

android:left=

"2dp"

android:top=

"4dp"

>

android:color=

"@android:color/darker_gray"

/>

android:radius=

"10dp"

/>

android:bottom=

"4dp"

android:right=

"2dp"

>

android:color=

"#ffffff"

/>

android:radius=

"10dp"

/>

從上面的示例**可以看到,layer-list可以作為根節點,也可以作為selector中item的子節點。layer-list可以新增多個item子節點,每個item子節點對應乙個drawable資源,按照item從上到下的順序疊加在一起,再通過設定每個item的偏移量就可以看到陰影等效果了。layer-list的item可以通過下面四個屬性設定偏移量:

這四個偏移量和控制項的margin設定差不多,都是外間距的效果。如何不設定偏移量,前面的圖層就完全擋住了後面的圖層,從而也看不到後面的圖層效果了。比如上面的例子,tab背景中的白色背景設定了android:bottom之後才能看到一點紅色背景。那麼如果偏移量設為負值會怎麼樣呢?經過驗證,偏移超出的部分會被截掉而看不到,不信可以自己試一下。有時候這很有用,比如當我想顯示乙個半圓的時候。

另外,關於item的用法,也做下總結:

根節點不同時,可設定的屬性是會不同的,比如selector下,可以設定一些狀態屬性,而在layer-list下,可以設定偏移量;

就算父節點同樣是selector,放在drawable目錄和放在color目錄下可用的屬性也會不同,比如drawable目錄下可用的屬性為android:drawable,在color目錄下可用的屬性為android:color;

item的子節點可以為任何型別的drawable類標籤,除了上面例子中的shape、color、layer-list,也可以是selector,還有其他沒講過的bitmap、clip、scale、inset、transition、rotate、animated-rotate、lever-list等等。

結尾

Android 樣式開發

記得以前學習 qt widget 的時候用 qss 來實現介面的樣式,html 是通過 css 來實現介面的樣式,同理,現在在 android 裡面,它也有一套可以實現介面樣式開發的機制,它提供了 shapedrawable statelistdrawable layerdrawable clipd...

Android樣式的開發 Style篇

android的樣式一般定義在res values styles.xml檔案中,其中有乙個根元素,而具體的每種樣式定義則是通過下的子標籤 其中,statelistanimator指定狀態改變時的動畫,button state list anim material的 如下 xmlns android ...

Android樣式的開發 Style篇

前面鋪墊了那麼多,終於要講到本系列的終篇,整合所有資源,定義成統一的樣式。哪些該定義成統一的樣式呢?舉幾個例子吧 每個頁面標題欄的標題基本會有一樣的字型大小 顏色 對齊方式 內間距 外間距等,這就可以定義成樣式 很多按鈕也都使用一致的背景 內間距 文字顏色 文字大小 文字的對齊方式等,這也可以定義成...