Android:自定義控件樣式(Selector)


前言

  在開發一個應用程序過程中不可避免的要去修改組件的樣式,比如按鈕、輸入框等。現在就看下如何通過Seletor實現樣式的自定義。先看下簡單的效果對比

概要實現

  首先寫這個Selector XML文件,叫做button_selector,放到了drawable文件夾下,大概內容如下所示

  

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 3 
 4     <!-- 按下狀態 -->
 5     <item android:state_pressed="true">
 6         <shape >
 7               <!-- 邊框顏色 -->
 8             <stroke android:width="1dip" android:color="#728ea3" />
 9             <!-- 背景顏色 -->
10             <solid android:color="#FFFFcc" />  
11         </shape>
12         
13     </item>
14     <!-- 默認狀態 -->
15     <item>
16         <shape>
17             <!-- 邊框顏色 -->
18             <stroke android:width="1dip" android:color="#728ea3" />
19             <!-- 背景顏色 -->
20             <solid android:color="#FFFFFF" />   
21         </shape>      
22     </item>
23 
24 </selector>

  然后為該按鈕設置background屬性:@drawable/button_selector,如下所示

  

<Button
        android:id="@+id/btnSelector"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button_selector"
        android:text="Selector演示"
 />

  這樣自定義樣式就成功的應用到了這個按鈕上了。

Selector

  先來看下官方描述:

  You can describe the state list in an XML file. Each graphic is represented by an <item> element inside a single <selector> element. Each <item> uses various attributes to describe the state in which it should be used as the graphic for the drawable.

  意思是說:你可以用一個XML文件來描述狀態列表。在唯一的selector節點下,用item來描述每一種狀態。每一個item通過不同的屬性來標識用於哪種屬性。

  下面就看下item的具體屬性

  android:drawable:引用一個drawable資源

  android:state_pressed:Boolean值,如果設置為true則代表用於對象在被按下的時候

  android:state_focused:Boolean值,如果設置為true則代表用於對象在獲得焦點的時候

  android:state_hovered:Boolean值,如果設置為true則代表用於對象在hover狀態的時候

  android:state_selected:Boolean值,如果設置為true則代表用於對象在選中的時候

  android:state_checkable:Boolean值,如果設置為true則代表用於對象允許選中的時候

  android:state_checked:Boolean值,如果設置為true則代表用於對象被選中的時候

  android:state_enabled:Boolean值,如果設置為true則代表用於對象可用的時候(響應觸摸或點擊事件)

  android:state_activated:Boolean值,如果設置為true則代表用於對象被激活的時候

  android:state_window_focused:Boolean值,如果設置為true則代表用於窗體獲得焦點的時候

  通過以上屬性,就可以靈活的定制出期望的結果了,這次例子只是展示了android:state_pressed這一種狀態的效果。Selector代碼為上文提到的button_selector。效果如下所示

  

簡單分析

  再來看下press的那個item內容。

  

<!-- 按下狀態 -->
    <item android:state_pressed="true">
        <shape >
              <!-- 邊框顏色 -->
            <stroke android:width="1dip" android:color="#728ea3" />
            <!-- 背景顏色 -->
            <solid android:color="#FFFFcc" />  
        </shape>
        
    </item>

  上圖所示的按下效果是通過shape標簽來完成的。這個標簽用來指定背景的樣式,由於這次重點介紹Selector的用法,Shape的用法就不過多解釋了,只是把代碼中出現的標簽做下簡單說明。

  stroke:用來設定背景邊框的樣式,可以去定義它的寬度(width),顏色(color),是否為虛線展示等等

  solid:用來設定背景顏色

 

后記

  這篇文字只是簡單的介紹了下Selector的大體用法,具體的靈活使用可以構造出很強大的顯示效果。

  原文地址:http://www.cnblogs.com/luoaz/p/3764784.html

  完整Demo:https://github.com/xiaoai-opensource/Selector

solid 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM