1. 程式人生 > >Android selector背景選擇器 用法彙總

Android selector背景選擇器 用法彙總

作用:可以根據控制元件的狀態來變換背景狀態(比如,一個按鈕,選中時,按鈕變成另外一張圖片)。

用法:建立xml檔案,位置:drawable/xxx.xml,

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@drawable/pic2" />
    <item android:state_focused="true" android:drawable="@drawable/pic2" />
    <item android:state_pressed="true" android:drawable="@drawable/pic2" />
    <item android:drawable="@drawable/pic1" /> <!-- 注:這個要寫在最後面,因為這個滿足大多數條件,若寫在第一個,則後面的不會被觸發--> 
</selector>

相關屬性解釋:

android:state_focused  是獲得焦點

  android:state_pressed  是點選
  android:state_selected 是選中 (選中=活的焦點+點選)

  android:state_enabled  是設定是否響應時間,指所有事件

使用xml檔案:

  a.xml中:   ListView 的  android:listSelector="@drawable/xxx"

                    或ListView的item裡面 android:background="@drawable/xxx"

  b.程式碼中: Drawable drawable = getResources().getDrawable(R.drawable.xxx);

                    listView.setSelector(drawable);此時可能會出現列表黑的情況,

                    加上android:cacheColorHint="@android:color/transparent"使其透明。

作用:可以實現按鈕的繪製,比如button的 圓角,漸變,邊框的繪製。

        <shape>
            <!-- 實心 -->
            <solid android:color="#ff9d77"/>
            <!-- 漸變 -->
            <gradient
                android:startColor="#ff8c00"
                android:endColor="#FFFFFF"
                android:angle="270" />
            <!-- 描邊 -->
            <stroke
                android:width="2dp"
                android:color="#dcdcdc" />
            <!-- 圓角 -->
            <corners
                android:radius="2dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
相關屬性解釋:
solid: 實心,就是填充的意思
  android:color 指定填充的顏色

gradient: 漸變

  android:startColor和android:endColor分別為起始和結束顏色,
  android:angle是漸變角度,必須為45的整數倍
  android:type="linear" 預設為線性漸變,可以指定漸變為徑向漸變,type="radial",需指定半徑android:gradientRadius="50"

stroke:描邊

  android:width="2dp" 描邊的寬度
  android:color="red" 描邊的顏色
  描邊也可以設定為虛線的形式,
  android:dashWidth="5dp" 表示"-"這樣一個橫線的寬度
  android:dashGap="3dp"   表示之間隔開的距離

corners: 圓角

  android:radius  角的弧度,值越大角越圓
  還可以設定
  android:topRightRadius="20dp"    右上角
  android:bottomLeftRadius="20dp"    右下角
  android:topLeftRadius="1dp"    左上角

  android:bottomRightRadius="0dp"    左下角

selector的混合使用 :

<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <!-- 漸變 -->
            <gradient
                android:startColor="#ff8c00"
                android:endColor="#FFFFFF"
                android:type="radial"
                android:gradientRadius="50" />
            <!-- 描邊 -->
            <stroke
                android:width="2dp"
                android:color="#dcdcdc"
                android:dashWidth="5dp" 
                android:dashGap="3dp" />
            <!-- 圓角 -->
            <corners
                android:radius="2dp"/>
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item>       
        <shape>
            <solid android:color="#ff9d77"/>
            <stroke
                android:width="2dp"
                android:color="#fad3cf" />
            <corners 
                android:topRightRadius="5dp"
                android:bottomLeftRadius="5dp"
                android:topLeftRadius="0dp"
                android:bottomRightRadius="0dp"
            />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>