ListViewで選択行の色を変える
2009-10/9 書き直しました。
http://d.hatena.ne.jp/isher/20091009
Androidのレイアウトの中で、ListViewは最も使用場面の多いものの一つだと思います。ただ、多機能なので、ちょっと凝った事しようとすると色々と面倒です。ListViewとAdapterを使うのですが、SwingのJTableとTableModelの関係に似てます。
とりあえずSDKの「platforms/android-1.5/samples/ApiDemos」に色々なサンプルが入ってるので覗いてみましょう。eclipseで、パッケージエクスプローラから新規Android Project、ソースから作成で、ApiDemosを選択すればプロジェクトを作成出来ます。
選択行の色を変える
サンプルに無かったので、どうやるか調べてみました。標準ではオレンジ色です。
コードであればListViewのsetSelectorメソッド、レイアウトを使うならandroid:listSelectorで設定するようです。AbsListView | Android Developers
設定方法はレイアウトIDを指定するかDrawableオブジェクトを指定するかの二通りがあります。
Drawableオブジェクトで設定する
ListView list = (ListView)findViewById(R.id.ListView01);
list.setSelector(new PaintDrawable(Color.BLUE));
選択行を青色にします。Drawableを上手く使えば凝った事も出来そうです。
左側がデフォルトで、右側が青色に変えた例。
単色であれば↓の方法が正しいと思うのですが
list.setSelector(new ColorDrawable(Color.BLUE));
何故か選択行以外の全ての行の色が変わってしまいます。調べてみると単色の指定で起こるバグっぽい・・・Google Groups
レイアウトIDで設定する
<?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="solid_red">#ff0000</drawable> <drawable name="solid_blue">#0000ff</drawable> </resources>
valuesの下にxml作って
list.setSelector(R.drawable.solid_blue);
これでOKのはずなのですが、上のバグにより上手く動作しません。レイアウトxmlのandroid:listSelectorでも無理です。現状コード上でDrawableオブジェクト使って設定するしか出来ないようです。(AndroidSDK1.5-r2にて)