<shape>和<selector>在android ui設計中經常用到。比如我們要自定義一個圓角button,點選button有些效果的變化,就要用到<shape>和<selector>。
可以這樣說,<shape>和<selector>在美化控件中的作用是至關重要。
作用:xml中定義的幾何形狀 位置:res/drawable/檔案的名稱.xml
java代碼中:r.drawable.檔案的名稱 xml中:android:background="@drawable/檔案的名稱"
<shape> android:shape=["rectangle" | "oval" | "line" | "ring"] 其中rectagle矩形,oval橢圓,line水準直線,ring環形 <shape>中子節點的常用屬性: <gradient> 漸變 android:startcolor 起始顔色 android:endcolor 結束顔色 android:angle 漸變角度,0從左到右,90表示從下到上,數值為45的整數倍,預設為0; android:type 漸變的樣式 liner線性漸變 radial環形漸變 sweep <solid > 填充 android:color 填充的顔色 <stroke >描邊 android:width 描邊的寬度 android:color 描邊的顔色 android:dashwidth 表示'-'橫線的寬度 android:dashgap 表示'-'橫線之間的距離 <corners >圓角 android:radius 圓角的半徑 值越大角越圓 android:toprightradius 右上圓角半徑 android:bottomleftradius 右下圓角角半徑 android:topleftradius 左上圓角半徑 android:bottomrightradius 左下圓角半徑 <padding >填充 android:bottom="1.0dip" 底部填充 android:left="1.0dip" 左邊填充 android:right="1.0dip" 右邊填充 android:top="0.0dip" 上面填充
根據不同的標明狀态來定義不同的現實效果 分為四大屬性: android:state_selected 是選中 android:state_focused 是獲得焦點 android:state_pressed 是點選 android:state_enabled 是設定是否響應事件,指所有事件 另: android:state_window_focused 預設時的背景圖檔 引用位置:res/drawable/檔案的名稱.xml
<?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 預設時的背景圖檔--> <item android:drawable="@drawable/pic1" /> <!-- 沒有焦點時的背景圖檔 --> <item android:state_window_focused="false" android:drawable="@drawable/pic_blue" /> <!-- 非觸摸模式下獲得焦點并單擊時的背景圖檔 --> android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic_red" /> <!-- 觸摸模式下單擊時的背景圖檔--> android:state_focused="false" android:drawable="@drawable/pic_pink" /> <!--選中時的圖檔背景--> android:state_selected="true" android:drawable="@drawable/pic_orange" <!--獲得焦點時的圖檔背景--> android:drawable="@drawable/pic_green" </selector>
将多個圖檔或上面兩種效果按照順序層疊起來
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/android_red"
android:gravity="center" />
</item>
<item android:top="10dp" android:left="10dp">
<bitmap android:src="@drawable/android_green"
<item android:top="20dp" android:left="20dp">
<bitmap android:src="@drawable/android_blue"
</layer-list>
<imageview
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/layers" />
效果圖:
以上三個标簽可以揉合到一塊兒來使用,所要實作的效果就是上面三種标簽的說明,比如下面這個例子:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item android:bottom="8.0dip">
<shape>
<solid android:color="#ffaaaaaa" />
</shape>
</item>
<item>
<corners android:bottomleftradius="4.0dip" android:bottomrightradius="4.0dip" android:topleftradius="1.0dip" android:toprightradius="1.0dip" />
<padding android:bottom="1.0dip" android:left="1.0dip" android:right="1.0dip" android:top="0.0dip" />
<corners android:bottomleftradius="3.0dip" android:bottomrightradius="3.0dip" android:topleftradius="1.0dip" android:toprightradius="1.0dip" />
<solid android:color="@color/setting_item_bgcolor_press" />
</layer-list>
<solid android:color="@color/setting_item_bgcolor" />
</selector>