標籤:
原文:http://keeganlee.me/post/android/20150830以下摘取了部分內容:shape
一般用shape定義的xml檔案存放在drawable目錄下,若項目沒有該目錄則建立一個,而不要將它放到drawable-hdpi等目錄中。只需要在對應控制項設定(bg_rectangle_with_stroke_dash.xml)
android:background="@drawable/bg_rectangle_with_stroke_dash"
四種類型
使用shape可以自訂形狀,可以定義下面四種類型的形狀,通過android: shape屬性指定:
- rectangle: 矩形,預設的形狀,可以畫出直角矩形、圓角矩形、弧形等
- oval: 橢圓形,用得比較多的是畫正圓
- line: 線形,可以畫實線和虛線
- ring: 環形,可以畫環形進度條
selector
有時候,不同狀態下改變的不只是背景、圖片等,文字顏色也會相應改變。而要處理這些不同狀態下展示什麼的問題,就要用selector來實現了。 一個<item/>包裹一個狀態和對應的效果
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 當前視窗失去焦點時 --> <item android:drawable="@drawable/bg_btn_lost_window_focused" android:state_window_focused="false" /> <!-- 不可用時 --> <item android:drawable="@drawable/bg_btn_disable" android:state_enabled="false" /> <!-- 按壓時 --> <item android:drawable="@drawable/bg_btn_pressed" android:state_pressed="true" /> <!-- 被選中時 --> <item android:drawable="@drawable/bg_btn_selected" android:state_selected="true" /> <!-- 被啟用時 --> <item android:drawable="@drawable/bg_btn_activated" android:state_activated="true" /> <!-- 預設時 --> <item android:drawable="@drawable/bg_btn_normal" /></selector>
而下面則是text_btn_selector.xml的代碼,用於按鈕的文本顏色:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 當前視窗失去焦點時 --> <item android:color="@android:color/black" android:state_window_focused="false" /> <!-- 不可用時 --> <item android:color="@android:color/background_light" android:state_enabled="false" /> <!-- 按壓時 --> <item android:color="@android:color/holo_blue_light" android:state_pressed="true" /> <!-- 被選中時 --> <item android:color="@android:color/holo_green_dark" android:state_selected="true" /> <!-- 被啟用時 --> <item android:color="@android:color/holo_green_light" android:state_activated="true" /> <!-- 預設時 --> <item android:color="@android:color/white" /></selector>
Layer-List
使用layer-list可以將多個drawable按照順序層疊在一起顯示,像中的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>
屬性
- solid:設定形狀填充的顏色
- padding:內容與形狀邊界的內間距
- gradient: 設定形狀的漸層顏色,可以是線性漸層、輻射漸層、掃描性漸層
- corners: 設定圓角,只適用於rectangle類型
- stroke: 設定描邊,可描成實線或虛線
- size:設定形狀預設的大小,可設定寬度和高度
動畫
- 視圖動畫的xml檔案放於res/anim/目錄下,,引用時為R.anim.filename。
- <animator>屬性動畫的xml檔案則放於res/animator/目錄下。用引用時為R.animator.filename
Style
- Android的樣式一般定義在res/values/styles.xml檔案中,其中有一個根項目<resource>,而具體的每種樣式定義則是通過<resource>下的子標籤<style>來完成,<style>通過添加多個<item>來設定樣式不同的屬性。
- 另外,樣式是可以繼承的,可通過<style>標籤的parent屬性聲明要繼承的樣式,也可通過點首碼 (.) 繼承,點前面為父樣式名稱,後面為子樣式名稱。點首碼方式只適用於自訂的樣式,若要繼承Android內建的樣式,則只能通過parent屬性聲明。
- 樣式的用法不只是用於單個View,也能用於Activity或整個Application,這時候需要在相應的<activity>標籤或<application>標籤裡設定android:theme屬性,引用的其實也是style,但一般稱為主題。
android自訂樣式大全:shape,selector,layer-list,drawable,動畫,style