Androidプログラマへの道 〜 Moonlight 明日香 〜 - トグルボタンを作成する

トグルボタンを作成する方法は2通りある.
静的に決定しているものはXMLで定義して, 動的に決定するものはコードで定義するというのが一般的である.


XMLファイルにより定義

  • res/values/strings.xml
    • トグルボタンのON/OFFに表示する文字列を定義する.
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">トグルボタンを作成する</string>
  <string name="on_label">ON</string>
  <string name="off_label">OFF</string>
</resources>
  • res/layout/main.xml
    • "@+id/toggle_id"でプログラムからアクセスするIDを定義する.
    • トグルボタンをどれくらいの大きさで配置するかを指定する.
    • "@string/xx_label"で表示する文字列を指定する.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >
  <ToggleButton android:id="@+id/toggle_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textOn="@string/on_label"
    android:textOff="@string/off_label" />
</LinearLayout>

コードにより定義

Activity#onCreateメソッドをオーb−ライドして, ボタンを定義するコードを記述する.
    • ToggleButtonクラスとLinearLayoutクラスをインポートする.
    • トグルボタンを生成し, ON/OFF時に表示する文字列をセットする.
    • トグルボタンを配置するレイアウトを生成し, トグルボタンをレイアウトに追加する. このとき, トグルボタンをどれくらいの大きさで配置するかを指定する.
    • setContentViewメソッドに, UIツリーのルートノードを表すウィジェットとしてレイアウトを渡して, アクティビティに関連付ける.
package com.moonlight_aska.android.toggle01;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.ToggleButton;

public class Toggle01 extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setContentView(R.layout.main);
    // トグルボタンを生成
    ToggleButton btn = new ToggleButton(this);
    btn.setTextOff("OFF");
    btn.setTextOn("ON");
    // レイアウトのトグルボタンを追加
    LinearLayout layout = new LinearLayout(this);
    layout.addView(btn, new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT,
      LinearLayout.LayoutParams.WRAP_CONTENT));

    setContentView(layout);
  }
}