Android官方文件—User Interface(Input Controls)(Buttons)
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的資訊。