Android介面-標題和按鈕定製-drawable

查志強發表於2014-07-11

【原文:http://blog.csdn.net/stalendp/article/details/8087882

這篇文章記錄了怎麼使用drawable中的StateList來實現自定義標題 以及 按鈕,先看一下效果圖吧:


先介紹一下drawable中的stateList

先看程式碼:

send_button.xml

  1. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  2.     <item android:state_pressed="true" android:drawable="@drawable/btn_pressed" />  
  3.     <item android:state_focused="true" android:drawable="@drawable/btn_pressed" />  
  4.     <item android:drawable="@drawable/btn_normal" />  
  5. </selector>  
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/btn_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/btn_pressed" />
    <item android:drawable="@drawable/btn_normal" />
</selector>

這段程式碼描述的是“傳送”按鈕,預設情況下,呈現的是btn_normal;當press或者focus的時候,為btn_pressed。兩圖片如下:

 

而stateList是一種drawable,所以上面的send_button.xml其實在android應用程式看來就是類似一張圖片,不過這張圖片是有狀態的。 作為按鈕,當點選這個控制元件時,它會提供一個友好的相應。

關於stateList,請參考官方文件:http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

Tips: 定義中的狀態的匹配是按照順序進行的,匹配到第一個成功就不往下匹配了(這裡我也不太清楚具體的應用場景,反正就是提醒,定義狀態的順序是比較重要的,也可以把這裡的狀態類比有著break的switch語句塊)。狀態的順序很重要,文章有個例子,參考那個例子就可以了,而對於按鈕,運用本文中的例子也可以了。


使用drawable

跟使用圖片是一樣的,直接上程式碼:

  1. <Button  
  2.         android:id="@+id/sendbutton"  
  3.         android:layout_width="wrap_content"  
  4.         android:layout_height="wrap_content"  
  5.        ...  
  6.         android:background="@drawable/send_button"  
  7.         android:text="發    送" />  
<Button
        android:id="@+id/sendbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       ...
        android:background="@drawable/send_button"
        android:text="發    送" />

本文中的例子還有一處使用了stateList,就是標題欄中跳轉的導航按鈕。

程式碼如下:

right_selector.xml

  1. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  2.     <item android:drawable="@drawable/right_selected" android:state_pressed="true"/>  
  3.     <item android:drawable="@drawable/right_normal"/>  
  4. </selector>  
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/right_selected" android:state_pressed="true"/>
    <item android:drawable="@drawable/right_normal"/>
</selector>

  1. <ImageButton  
  2.          android:id="@+id/about_us_back_button"  
  3.          android:layout_width="wrap_content"  
  4.          android:layout_height="wrap_content"  
  5.          ...  
  6.          android:background="@drawable/right_selector"  
  7.          android:src="@drawable/arrow_left" />  
<ImageButton
         android:id="@+id/about_us_back_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         ...
         android:background="@drawable/right_selector"
         android:src="@drawable/arrow_left" />


設定無標題

預設情況下,android應用是有標題的,而我們這裡定義了標題,就不需要原來的標題了,這裡要使用@android:style/Theme.NoTitleBar這個style。

我是在activity中設定的,具體看程式碼:

AndroidManifest.xml

  1. <activity android:name=".MainActivity"  
  2.           android:label="@string/title_activity_main"  
  3.           android:theme="@android:style/Theme.NoTitleBar" >  
  4.             <intent-filter>  
  5.                 <action android:name="android.intent.action.MAIN" />  
  6.   
  7.                 <category android:name="android.intent.category.LAUNCHER" />  
  8.             </intent-filter>  
  9.         </activity>  
<activity android:name=".MainActivity"
          android:label="@string/title_activity_main"
          android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

整合layout檔案

我喜歡把功能集中的一些元素放到單一的檔案中,然後使用include引用。
比如,這個應用中,我把title和conent分成了兩個檔案:head.xml和content.xml
然後在activity_main.xml中引用這兩個檔案,具體看程式碼:
activity_main.xml
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"   
  5.     android:orientation="vertical"  
  6.     android:background="@color/white">  
  7.   
  8.     <include layout="@layout/head"   
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"/>  
  11.   
  12.     <include  
  13.         android:layout_width="wrap_content"  
  14.         android:layout_height="wrap_content"  
  15.         android:layout_gravity="center"  
  16.         android:layout_marginTop="30sp"  
  17.         layout="@layout/content" />  
  18.   
  19. </LinearLayout>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical"
    android:background="@color/white">

    <include layout="@layout/head" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

    <include
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="30sp"
        layout="@layout/content" />

</LinearLayout>


原始碼位置:http://download.csdn.net/download/stalendp/4663132


相關文章