Buttons
按鈕由文本或圖標(或文本和圖標兩者)組成,用於傳達用戶觸摸時發生的操作。
根據您是否需要帶有文本,圖標或兩者的按鈕,您可以通過三種方式在佈局中創建按鈕:
- 使用文本,使用Button類:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
... />
- 使用圖標,使用ImageButton類:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_icon"
... />
- 使用帶有文本和圖標的Button類以及android:drawableLeft屬性:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:drawableLeft="@drawable/button_icon"
... />
響應Click事件
當用戶單擊按鈕時,Button對象會收到一個單擊事件。
要爲按鈕定義click事件處理程序,請將android:onClick屬性添加到XML佈局中的<Button>元素。此屬性的值必須是您要響應click事件時要調用的方法的名稱。然後,託管佈局的Activity必須實現相應的方法。
例如,這是一個使用android:onClick的按鈕佈局:
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
在承載此佈局的Activity中,以下方法處理click事件:
/** Called when the user touches the button */
public void sendMessage(View view) {
// Do something in response to button click
}
您在android:onClick屬性中聲明的方法必須具有完全如上所示的簽名。具體來說,該方法必須:
- 公開
- 返回 void
- 將View定義爲唯一參數(這將是單擊的View)
使用OnClickListener
您還可以以編程方式而不是XML佈局聲明click事件處理程序。如果在運行時實例化Button或者需要在Fragment子類中聲明單擊行爲,則可能需要這樣做。
要以編程方式聲明事件處理程序,請創建一個View.OnClickListener對象,並通過調用setOnClickListener(View.OnClickListener)將其指定給該按鈕。例如:
Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do something in response to button click
}
});
美化你的按鈕
按鈕(背景圖像和字體)的外觀可能因設備而異,因爲不同製造商的設備通常具有不同的輸入控件默認樣式。
您可以使用應用於整個應用程序的主題精確控制控件的樣式。例如,要確保運行Android 4.0及更高版本的所有設備都在您的應用中使用Holo主題,請在清單的<application>元素中聲明android:theme =“@ android:style / Theme.Holo”。另請閱讀博客文章Holo Everywhere,瞭解有關在支持舊設備時使用Holo主題的信息。
要自定義具有不同背景的單個按鈕,請使用drawable或color resource指定android:background屬性。或者,您可以爲按鈕應用樣式,該樣式的工作方式類似於HTML樣式,以定義多個樣式屬性,例如背景,字體,大小等。有關應用樣式的更多信息,請參閱樣式和主題。
無邊框按鈕
一種有用的設計是“無邊框”按鈕。無邊框按鈕類似於基本按鈕,除了它們沒有邊框或背景,但在不同狀態(例如單擊時)仍然會改變外觀。
要創建無邊框按鈕,請將borderlessButtonStyle樣式應用於按鈕。例如:
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
style="?android:attr/borderlessButtonStyle" />
自定義背景
如果要真正重新定義按鈕的外觀,可以指定自定義背景。但是,您的背景應該是狀態列表資源,而不是提供簡單的位圖或顏色,根據按鈕的當前狀態更改外觀。
您可以在XML文件中定義狀態列表,該文件定義用於不同按鈕狀態的三種不同圖像或顏色。
要爲按鈕背景創建可繪製的狀態列表:
1.爲按鈕背景創建三個位圖,表示默認,按下和聚焦按鈕狀態。
要確保圖像適合各種大小的按鈕,請將位圖創建爲九個修補程序位圖。
2.將位圖放入項目的res / drawable /目錄中。確保每個位圖都被正確命名以反映它們各自代表的按鈕狀態,例如button_default.9.png,button_pressed.9.png和button_focused.9.png。
3.在res / drawable /目錄中創建一個新的XML文件(將其命名爲button_custom.xml)。插入以下XML:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pressed"
android:state_pressed="true" />
<item android:drawable="@drawable/button_focused"
android:state_focused="true" />
<item android:drawable="@drawable/button_default" />
</selector>
這定義了一個可繪製資源,它將根據按鈕的當前狀態更改其圖像。
- 第一個<item>定義按下(激活)按鈕時要使用的位圖。
- 第二個<item>定義按鈕聚焦時使用的位圖(當使用軌跡球或方向鍵突出顯示按鈕時)。
- 第三個<item>定義了按鈕處於默認狀態時使用的位圖(既不按也不聚焦)。
注意:<item>元素的順序很重要。當引用此drawable時,將按順序遍歷<item>元素以確定哪個元素適合當前按鈕狀態。因爲默認位圖是最後一個,所以只有當條件android:state_pressed和android:state_focused都被評估爲false時纔會應用它。
此XML文件現在表示單個可繪製資源,當Button爲其背景引用時,顯示的圖像將根據這三種狀態而更改。
4.然後只需將drawable XML文件應用爲按鈕背景:
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
android:background="@drawable/button_custom" />
有關此XML語法的更多信息,包括如何定義禁用,懸停或其他按鈕狀態,請閱讀有關State List Drawable的信息。