ラジオボタン
■準備
事前準備として以下の手順を実行して下さい。
①.プロジェクト作成
新規プロジェクト「RadioButtonTest」をEmptyActivityで作成します。
②.HelloWorld削除
作成後はProjectウィンドウのres/layout/activity_main.xmlを
クリックしてXMLを表示してHello WorldのTextViewタグを削除します。
■ラジオグループ追加
ラジオグループはラジオボタンを管理するための部品で、
このグループにラジオボタンを追加することで、
グループ内のラジオボタンの切り替えやどのボタンが選ばれてるかを
取得することができます。
●ラジオグループの追加
ラジオグループはPaletteのContainersの「RadioGroup」で追加できます。
ラジオグループは全面に反映されるので、範囲を指定したい場合は
RadioGroupプロパティのlayout:width(幅)とlayout:height(高さ)で範囲を変更できます。
■ラジオボタン追加
ラジオグループを追加したらグループ内にラジオボタンを追加します。
ラジオボタン:
複数の選択肢の中から1つだけ選択する際に使用する
複数のラジオボタンを1つのグループとして考え、その中から選択して
その内容を使用して処理を作成する
●ラジオボタンの追加
ラジオボタンはPaletteのWidgetsの「RadioButton」で追加できます。
追加するボタンはラジオグループの中に追加して下さい。
RadioButtonプロパティで以下の情報を変更できます。
texSize => textのサイズ変更
text => テキストの内容
textColor => テキストの色
■ラジオボタンのコーディング方法
●使用クラス
ラジオボタンのコーディングには以下のクラスを使用します。
・RadioButton
ラジオボタンクラス
import => android.widget.RadioButton
・RadioGroup
ラジオグループクラス
import => android.widget.RadioGroup
・OnCheckedChangeListener
ラジオボタンの切り替えた瞬間を取得するために
必要なインターフェースクラス
import => android.widget.RadioGroup
●RadioGroupの使い方
RadioGroupクラスでよく使用される関数は以下のようなものがあります。
・check
戻り値:
なし
引数:
int id:
ラジオボタンリソースID
内容:
引数で指定したIDのラジオボタンを選択状態にする
例:
RadioGroup group = findViewById(ラジオグループリソースID);
group.check(ラジオボタンリソースID);
・getCheckRadioButtonId
戻り値:
int:
選択中 => ラジオボタンのリソースID
非選択 => -1
引数:
なし
内容:
選択中のラジオボタンのリソースIDを取得する
例:
RadioGroup group = findViewById(ラジオグループリソースID);
// 選択中ラジオボタンリソースID取得
int button_id = group.getCheckRadioButtonId();
if (button_id != -1)
{
RadioButton button = (RadioButton)findViewById(button_id);
// ラジオボタンのテキストを取得
String text = button.getText().toString();
Log.d("RadioButtonText", text);
}
・clearCheck
戻り値:
なし
引数:
なし
内容:
現在の選択中のラジオボタンを解除して非選択状態にする
例:
RadioGroup group = (RadioGroup)findViewById(ラジオグループリソースID);
// 選択解除
group.clearCheck();
●OnCheckedChangeListenerの使い方
OnCheckedChangeListenerにはonCheckedChangedオーバーロード関数が用意されており、
この関数はラジオボタンが切り替わった瞬間に呼び出されます。
OnCheckedChangeListenerは切り替わった瞬間を知りたいと考える
ラジオグループに登録する必要があり、
登録を行わないと切り替わったことに対する通知はきません。
登録はRadioGroupクラスにsetOnCheckedChangeListener関数が用意されているので、
そちらを使用して登録を行います。
・onCheckedChanged
戻り値:
なし
引数:
RadioGroup group:
ラジオボタンが切り替わったグループ
int checkedId:
切り替え後のID(非選択は-1)
内容:
ラジオボタンが切り替わった際に呼び出される。
切り替わったグループと切り替え後のラジオボタンのリソースIDは
引数で渡される
・setOnCheckedChangeListener
戻り値:
なし
引数:
OnCheckedChangeListener:
切り替わりの通知を受け取るOnCheckedChangeListenerインスタンス
内容:
ラジオグループにOnCheckedChangeListenerインスタンスの登録を行う
・RadioGroupへのOnCheckedChangeListenerの登録方法
OnCheckedChangeListenerを使用するにはOnCheckedChangeListenerを
継承か無名クラスをインスタンス化してRadioGroupへ登録する必要があります。
・継承
継承は専用のクラスを用意するかラジオグループを追加している
アクティビティに対して行います。
以下はアクティビティに対して継承をした場合の例です。
public class MainActivity extends AppCompatActivity
implements RadioGroup.OnCheckedChangeListener
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RadioGroup group = findViewById(ラジオグループリソースID);
// ラジオグループにOnCheckedChangeListenerを登録
group.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
}
}
・無名クラス
無名クラスを用意してOnCheckedChangeListenerをインスタンス化し、
setOnCheckedChangeListenerに設定します。
// 無名クラスの作成
OnClickListener listener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(
RadioGroup group,
int checkedId
)
{
}
};
RadioGroup group = findViewById(ラジオグループリソースID);
// ラジオグループにOnCheckedChangeListenerインスタンスを登録
group.setOnCheckedChangeListener(listener);
■サンプル
※切り替えを分かりやすくするためにTextViewを画面に追加していますので追加をお願いします。
// アクティビティにOnCheckedChangeListenerを継承
public class MainActivity extends AppCompatActivity
implements RadioGroup.OnCheckedChangeListener {
private TextView m_Text;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
m_Text = (TextView)findViewById(R.id.textView);
// グループの取得
RadioGroup group = (RadioGroup)findViewById(R.id.radioGroup);
// リスナーの設定
group.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
RadioButton button = (RadioButton)findViewById(checkedId);
// ボタンリソースIDを取得
switch (button.getId())
{
case R.id.radioButton:
m_Text.setText("ボタン1");
break;
case R.id.radioButton2:
m_Text.setText("ボタン2");
break;
case R.id.radioButton3:
m_Text.setText("ボタン3");
break;
}
}
}