Android自定義Button字型顏色
我們可以使用selector來實現Button的特效,如圖所示:
預設情況
獲得焦點的時候
點選按鈕
main.xml
Xml程式碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="按下或者獲得焦點Button會變不同顏色"
<SPAN style="COLOR: #ff0000">android:textColor="@color/button_text" </SPAN>/>
</LinearLayout>
www.2cto.com
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="按下或者獲得焦點Button會變不同顏色"
android:textColor="@color/button_text" />
</LinearLayout>
XML 檔案儲存在res/color/button_text.xml
Xml程式碼
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true" android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
背景選擇器-selector
概述
在drawable/xxx.xml中配置,通過配置selector,可以使系統執行時根據控制元件物件的狀態使用相應的圖片、文字等。
selector中的常用屬性
- android:state_selected 控制元件選中狀態,可以為true或false
- android:state_focused 控制元件獲得焦點狀態,可以為true或false
- android:state_pressed 控制元件點選狀態,可以為true或false
- android:state_enabled 控制元件使能狀態,可以為true或false
- android:state_checkable 控制元件可勾選狀態,可以為true或false
- android:state_checked 控制元件勾選狀態,可以為true或false
注意:在狀態描述中,第一個匹配當前狀態的item會被使用。因此,如果第一個item沒有任何狀態特性的話,那麼它將每次都被使用,所以預設的值必須總是在最後。
- android:window_focused 應用程式視窗焦點狀態,可以為true或false
-
android:color 定義特定狀態的顏色
-
為16進位制顏色。這個顏色由rgb值指定,可帶alpha,必須以”#“開頭,後面跟隨alpha-red-green-blue資訊,格式可以為:
- #rgb
- #argb
- #rrggbb
- #aarrggbb
-
為16進位制顏色。這個顏色由rgb值指定,可帶alpha,必須以”#“開頭,後面跟隨alpha-red-green-blue資訊,格式可以為:
使用selector設定背景
把下面的XML儲存成.xml檔案(比如list_item_bg.xml),執行時系統會根據ListView中列表項的狀態來使用相應的背景圖片。
drawable/list_item_bg.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/pic1" /> <!-- 非觸控模式下獲得焦點並單擊時的背景圖片 --> <item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" /> <!-- 觸控模式下單擊時的背景圖片 --> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" /> <!--選中時的圖片背景 --> <item android:state_selected="true" android:drawable="@drawable/pic4" /> <!--獲得焦點時的圖片背景 --> <item android:state_focused="true" android:drawable="@drawable/pic5" /> </selector>
使用方法
- 第一種是在listview中配置android:listSelector=”@drawable/list_item_bg”
- 第二種是在listview的item中新增屬性android:background=”@drawable/list_item_bg”
-
第三種是java程式碼中使用:
Drawable drawable = getResources().getDrawable(R.drawable.list_item_bg); listview.setSelector(drawable);
注:列表有時候為黑的情況,需要加上下面的程式碼使其透明:
android:cacheColorHint="@android:color/transparent"
使用selector設定字型顏色
drawable/button_font.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="#FF0000" /> <item android:state_focused="true" android:color="#00FF00" /> <item android:state_pressed="true" android:color="#0000FF" /> <item android:color="#000000" /> </selector>
使用方法
android:textColor="@drawable/button_color"
更復雜的效果
還可以實現更復雜的效果,例如漸變等等。 drawable/button_color.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <!-- 定義當button 處於pressed 狀態時的形態。--> <shape> <gradient android:startColor="#8600ff" /> <stroke android:width="2dp" android:color="#000000" /> <corners android:radius="5dp" /> <padding android:left="10dp" android:top="10dp" android:bottom="10dp" android:right="10dp"/> </shape> </item> <item android:state_focused="true"> <!-- 定義當button獲得 focus時的形態 --> <shape> <gradient android:startColor="#eac100"/> <stroke android:width="2dp" android:color="#333333" color="#ffffff"/> <corners android:radius="8dp" /> <padding android:left="10dp" android:top="10dp" android:bottom="10dp" android:right="10dp"/> </shape> </item> </selector>
使用方法
android:background="@drawable/button_color" android:focusable="true"