1. 程式人生 > >Android官方文件—User Interface(Input Controls)(Buttons)

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的資訊。