在應用程式中新增按鈕

試用 Compose
Jetpack Compose 是 Android 推薦的 UI 工具包。瞭解如何在 Compose 中新增元件。

按鈕由文字或/或圖示組成,用於傳達使用者動作 輕觸該選項。

您可以根據以下三種方式,在版面配置中建立按鈕: 以文字、圖示或兩者並用的方式呈現:

  
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:paddingLeft="16dp"
      android:paddingRight="16dp"
      android:orientation="vertical" >
  
      <Button
          android:id="@+id/supabutton"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="I'm a button" />
  
      <ImageButton
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:contentDescription="A tiny Android icon"
          android:src="@drawable/baseline_android_24"
          app:tint="#ff0000" />
  
      <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:drawableStart="@drawable/baseline_android_24"
          android:drawablePadding="4dp"
          android:drawableTint="#ff0000"
          android:text="I'm a button with an icon" />
  </LinearLayout>

先前的程式碼會產生類似下方的內容:

顯示三種按鈕的圖片
圖 1:三種按鈕樣式。

回應點擊事件

使用者輕觸按鈕時, Button 物件收到 點擊事件。

如要透過程式輔助方式宣告事件處理常式,請建立 View.OnClickListener 物件,然後呼叫 setOnClickListener(View.OnClickListener), 如以下範例所示:

Kotlin

findViewById<Button>(R.id.supabutton)
  .setOnClickListener {
      Log.d("BUTTONS", "User tapped the Supabutton")
  }

Java

Button button = (Button) findViewById(R.id.supabutton);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
      Log.d("BUTTONS", "User tapped the Supabutton");
    }
});

設定按鈕樣式

按鈕 (背景圖片和字型) 的外觀會因裝置而異 因為不同製造商的裝置通常有不同的輸入樣式 控制項

如要自訂不同背景的個別按鈕,請指定 android:background 個屬性 並包含可繪項目或顏色資源。或者,您也可以為按鈕套用樣式。 與 HTML 樣式類似 定義多個樣式屬性,例如背景 字型和大小如要進一步瞭解如何套用樣式,請參閱 樣式與主題

無邊框按鈕

「無邊框」按鈕是一項實用的設計。無邊框按鈕與基本按鈕類似 但不含邊框或背景,但在不同狀態下仍會變更外觀。 例如輕觸畫面時

如要建立無邊框按鈕,請套用 borderlessButtonStyle 按鈕的樣式,如以下範例所示:

<Button
  android:id="@+id/supabutton"
  style="?android:attr/borderlessButtonStyle"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="I'm a button" />

自訂背景

如要確實重新定義按鈕的外觀,可以指定自訂背景。 然而,您提供的背景必須是狀態清單,而非提供簡單的點陣圖或顏色 會根據按鈕目前的狀態變更外觀的資源。

您可以在 XML 檔案中定義狀態清單,以定義要用於 不同的按鈕狀態

如要為按鈕背景建立可繪製的狀態清單,請按照下列步驟操作:

  1. 為按鈕背景建立三個點陣圖,代表預設、輕觸和聚焦 按鈕狀態。如果要確保您的圖片適用於不同大小的按鈕,請以 nine-patch 點陣圖。
  2. 將點陣圖放入專案的 res/drawable/ 目錄。為每個點陣圖命名 以反映按鈕代表的按鈕狀態,例如 button_default.9.png button_pressed.9.pngbutton_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> 定義在按鈕為預設值時要使用的點陣圖 未輕觸或聚焦。
    ,瞭解如何調查及移除這項存取權。

    這個 XML 檔案代表單一可繪製資源。當 Button 參照: 背景會根據按鈕狀態變更顯示的圖片。

  4. 套用可繪製 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 語法,包括如何定義停用的按鈕, 或處於其他狀態的內容 StateListDrawable