ボタンは、テキストまたはアイコン(またはその両方)で構成され、ユーザーがボタンをタップしたときに実行されるアクションを表します。
ボタンにテキスト、アイコン、またはその両方をつけるかどうかによって、次の 3 つの方法でレイアウトにボタンを作成できます。
<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>
上記のコードでは、次のような結果が生成されます。
クリック イベントに応答する
ユーザーがボタンをタップすると、Button オブジェクトは on-click イベントを受け取ります。
イベント ハンドラをプログラムで宣言するには、次の例のように 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 スタイルと同様に機能し、背景、フォント、サイズなどの複数のスタイル プロパティを定義します。スタイルの適用について詳しくは、スタイルとテーマをご覧ください。
枠線なしボタン
便利なデザインの 1 つに「枠線なし」のボタンがあります。枠線なしボタンは、境界線や背景がないことを除けば、基本的なボタンと似ていますが、タップした場合などのさまざまな状態に応じて外観が変わります。
枠線なしボタンを作成するには、次の例のように、ボタンに 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 ファイルで定義できます。ここでは、3 つの異なる画像または色(異なるボタン状態に使用する)を定義します。
ボタンの背景用に状態リストのドローアブルを作成するには、次の操作を行います。
- ボタンの背景用に 3 つのビットマップ(デフォルト、タップ、フォーカスのボタン状態をそれぞれ表す)を作成します。画像がさまざまなサイズのボタンに収まるようにするには、ビットマップを 9-patch ビットマップとして作成します。
- ビットマップをプロジェクトの
res/drawable/ディレクトリに配置します。それぞれが表すボタンの状態を反映するように、各ビットマップに名前を付けます(button_default.9.png、button_pressed.9.png、button_focused.9.pngなど)。 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>
これは、ボタンの現在の状態に応じて画像を変更する 1 つのドローアブル リソースを定義します。
- 最初の
<item>は、ボタンがタップされた(アクティブ化された)ときに使用するビットマップを定義します。 - 第 2 の
<item>は、ボタンがフォーカスされているとき(カーソルボタンまたは十字キーを使用してボタンが強調表示されているときなど)に使用するビットマップを定義します。 - 第 3 の
<item>は、ボタンがデフォルトの状態にあるとき(タップもフォーカスもされていない)に使用するビットマップを定義します。
この XML ファイルは単一のドローアブル リソースを表します。背景の
Buttonによって参照されると、表示される画像はボタンの状態に応じて変化します。- 最初の
- ボタンの背景としてドローアブル 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 をご覧ください。