在寫代碼的時候,有時候需要控件在不同狀態下顯示不同的外觀,比如在按鈕按下的時候要變顏色,EditText獲取焦點時候邊框要變顏色等。那么下面就來梳理一下這些是怎么實現的。
(一)按鈕按下時候變顏色
1、在項目的drawable目錄下創建selector_title_imagebutton_bg.xml文件,內容如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 3 4 <!-- title欄ImageButton按下去時候的顏色 --> 5 <item android:drawable="@drawable/LightBlue" android:state_pressed="true"/> 6 7 <!-- title欄ImageButton正常時候的顏色 --> 8 <item android:drawable="@drawable/ThemeDefault"/> 9 10 11 <!-- 注:LightBlue和ThemeDefault都是在color.xml文件中定義的drawable類型的顏色值 --> 12 13 </selector>
2、在values目錄下styles.xml文件中增加一個style項,如下:
1 <!-- 標題欄ImageButton的style --> 2 <style name="TitleIbStyle" parent="@android:style/Widget.ImageButton"> 3 <item name="android:background">@drawable/selector_title_imagebutton_bg</item> 4 </style>
3、在布局xml文件中,創建ImageButton時只需設置其style屬性為"TitleIbStyle"即可:
1 <ImageButton 2 android:id="@+id/title_base_left_ib" 3 style="@style/TitleIbStyle" 4 android:layout_width="wrap_content" 5 android:layout_height="wrap_content" 6 android:padding="5dp" />
(二)EditText獲取焦點時候邊框變顏色
1、在項目的drawable目錄下新建一個selector_edittext_bg.xml文件:
1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 3 4 <item android:drawable="@drawable/et_pressed" android:state_focused="true"/> 5 <item android:drawable="@drawable/et_normal"/> 6 7 <!-- 注:et_pressed和et_normal是drawable目錄下兩張相同大小、填充顏色都為白色但邊框顏色不同的圓角矩形的png圖片 --> 8 9 </selector>
2、在values目錄下styles.xml文件中增加一個style項,如下:
1 <!-- EditText的自定義風格 --> 2 <style name="MyEtStyle" parent="@android:style/Widget.EditText"> 3 <item name="android:background">@drawable/selector_edittext_bg</item> 4 </style>
3、在布局xml文件中,創建EditText時只需設置其style屬性為"MyEtStyle"即可:
1 <EditText 2 android:id="@+id/content_et" 3 style="@style/MyEtStyle" 4 android:layout_width="wrap_content" 5 android:layout_height="wrap_content"
(三)總結
通過上述方式,其實還可以實現很多種其他的自定義效果,有待進一步探索。
?