天天看點

android 按鈕 背景 文字 自定義

當然除了使用drawable這樣的圖檔外今天談下自定義圖形shape的方法,對于Button控件Android上支援以下幾種屬性shape、gradient、stroke、corners等。

  我們就以目前系統的Button的selector為例說下:

Java代碼  

<shape>  

            <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>  

對于上面,這條shape的定義,分别為漸變,在gradient中startColor屬性為開始的顔色,endColor為漸變結束的顔色,下面的angle是角度。接下來是stroke可以了解為邊緣,corners為拐角這裡radius屬性為半徑,最後是相對位置屬性padding。

 對于一個Button完整的定義可以為:

<?xml version="1.0" encoding="utf-8"?>  

<selector  

    xmlns:android="http://www.norkoo.com">  

    <item android:state_pressed="true" >  

        <shape>  

    </item>  

    <item android:state_focused="true" >  

                android:startColor="#ffc2b7"  

                android:endColor="#ffc2b7"  

    <item>          

                android:startColor="#ff9d77"  

                android:endColor="#ff9d77"  

                android:color="#fad3cf" />  

</selector>  

注意!提示大家,以上幾個item的差別主要是展現在state_pressed按下或state_focused獲得焦點時,當當來判斷顯示什麼類型,而沒有state_xxx屬性的item可以看作是正常狀态下。

<?xml version="1.0" encoding="utf-8"?>

    <selector xmlns:android="http://schemas.android.com/apk/res/android" >

        <item

            android:color="hex_color"

            android:state_pressed=["true" | "false"]

            android:state_focused=["true" | "false"]

            android:state_selected=["true" | "false"]

            android:state_active=["true" | "false"]

            android:state_checkable=["true" | "false"]

            android:state_checked=["true" | "false"]

            android:state_enabled=["true" | "false"]

            android:state_window_focused=["true" | "false"] />

    </selector>

Elements:

<selector>

必須。必須是根元素。包含一個或多個<item>元素。

              Attributes:

                  xmlns:android

                            String,必須。定義XML的命名空間,必須是

                            “http://schemas.android.com/apk/res/android”.

    <item>

              定義特定狀态的color,通過它的特性指定。必須是<selector>的子元素。

                  android:color

                            16進制顔色。必須。這個顔色由RGB值指定,可帶Alpha。

                            這個值必須以“#”開頭,後面跟随Alpha-Red-Green-Blue資訊:

l   #RGB

l   #ARGB

l   #RRGGBB

l   #AARRGGBB

    android:state_pressed

Boolean。“true”表示按下狀态使用(例如按鈕按下);“false”表示非按下狀态使用。

                  android:state_focused

Boolean。“true”表示聚焦狀态使用(例如使用滾動球/D-pad聚焦Button);“false”表示非聚焦狀态使用。

                  android:state_selected

Boolean。“true”表示選中狀态使用(例如Tab打開);“false”表示非選中狀态使用。

                  android:state_checkable

Boolean。“true”表示可勾選狀态時使用;“false”表示非可勾選狀态使用。(隻對能切換可勾選—非可勾選的構件有用。)

                  android:state_checked

                            Boolean。“true”表示勾選狀态使用;“false”表示非勾選狀态使用。

                  android:state_enabled

Boolean。“true”表示可用狀态使用(能接收觸摸/點選事件);“false”表示不可用狀态使用。

                  android:window_focused

Boolean。“true”表示應用程式視窗有焦點時使用(應用程式在前台);“false”表示無焦點時使用(例如Notification欄拉下或對話框顯示)。

注意:記住一點,StateList中第一個比對目前狀态的item會被使用。是以,如果第一個item沒有任何狀态特性的話,那麼它将每次都被使用,這也是為什麼預設的值必須總是在最後(如下面的例子所示)。

Examples:

XML檔案儲存在res/color/button_text.xml

<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>

    這個Layout XML會應用ColorStateList到一個View上:

<Button

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/button_text"

    android:textColor="@color/button_text" />

繼續閱讀