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的信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章