1. 程式人生 > >Android自定義Button字型顏色

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

使用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"