Android ArrayAdapter に ラジオボタンを置く

arrayadapter_with_radio

Android だと、リストビューから一件選択するのに、ラジオボタンが表示されることがよくある。

確かに、上記のようなダイアログを作ってて、対象が1件だけだと、ぱっと見メッセージと区別がつかないのでどうしていいか分からないが、ラジオボタンがあると「選択してね」感がかもしだされる。

ラジオボタンを使ってみる

で、ラジオボタンを配置しようと、単純にラジオボタンを含むレイアウト(R.id.rdo_select_item)を作成して動かしてみると・・・

  1. ArrayAdapter<String> adapter
  2. = new ArrayAdapter(context,
  3. R.layout.row_items,
  4. R.id.rdo_select_item,
  5. items);

きちんと画面には表示されるが、リストビューの setOnItemClickListener に 登録したリスナーでリストの選択がどうもハンドリング出来ない。

android.R.layout.simple_spinner_dropdown_item を使ってみる

と、まぁ表示はされるのだが、文字色が黒だったり、どうもしっくりこない。

あと、選択したらきちんと動くのだが、ラジオボタンはフェイクのようで、選択状態の見た目にはならない。

  1. ArrayAdapter adapter
  2. = new ArrayAdapter(context,
  3. android.R.layout.simple_spinner_dropdown_item,
  4. items);

TextView の代わりに CheckTextView を使いつつ、listChoiceIndicatorSingle を指定してみる

ArrayAdapter の使い方は、通常のTextView を単純に使用するのと同じにしておいて、

  1. ArrayAdapter adapter
  2. = new ArrayAdapter(context,
  3. R.layout.row_items,
  4. R.id.txt_select_item,
  5. items);

レイアウトの方で、TextView の代わりに、CheckedTextView を使う。

そして、checkMark 属性に、android.R.attr.listChoiceIndicatorSingle を指定する。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/txt_select_item"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:textSize="20sp"
  7. android:checkMark="?android:attr/listChoiceIndicatorSingle">
  8. </CheckedTextView>

これで、見た目的には、希望通りになった。

ただ、android.R.layout.simple_spinner_dropdown_item 同様、ラジオボタンはフェイクだけど・・・ まぁいいや。

これに限らず、android.R には、こねたがいっぱいつまってそうなので、いずれ詳しくみてみたい。

また一歩野望に近づいた。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です