読者です 読者をやめる 読者になる 読者になる

And Q.

思ったことを書きます

Spinnerのカスタマイズ

AndroidウィジェットであるSpinner(プルダウンメニューみたいなやつ)を色々いじってたのでメモ。

自家製Spinnerをつくる

自家製画像のSpinnerをつくるにはまず2つのxmlを用意します。それぞれ

  • 本体のレイアウト
  • ドロップダウンアイテム(本体をタップしたら出てくるやつの1つ1つのビュー)

となります。SpinnerにくっつけるAdapterをつくる際にそれぞれのレイアウトを挿入してやることになります。

Spinner spinner = (Spinner) getView().findViewById(R.id.spinner);
        ArrayAdapter<CharSequence> myAdapter = ArrayAdapter.createFromResource(
                getActivity(),
                (Spinnerに表示させる文字列の配列リソース), R.layout.spinner_item);
        myAdapter.setDropDownViewResource(R.layout.spinner_drop_down_item);
        spinner.setAdapter(myAdapter);

R.layout.spinner_itemとR.layout.spinner_drop_down_itemがそれぞれに相当してます。
xmlの中身は
spinner_item.xml

<?xml version="1.0" encoding="UTF-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:layout_width="fill_parent"
    android:layout_height="@dimen/spinner_height"
    android:gravity="left|center_vertical"
    android:paddingLeft="4dp"
    android:textColor="@color/font_color_spinner"
    android:textSize="20sp" />

spinner_drop_down_item.xml

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="8dp"
    android:paddingLeft="4dp"
    android:paddingTop="8dp"
    android:textColor="@color/font_color_spinner"
    android:textSize="20sp" />

こんな感じでフォントの大きさやら配置を好きなようにいじることができます。

見た目を変える

画像を用意してxml上のbackgroundに指定します。

<Spinner
  android:background="@drawable/作った画像"
/>

ドロップダウンアイテムの背景を透過させる

spinner_drop_down_item.xmlのbackgroundに色を指定すればその通りに出るんですけど、なぜか透明度が反映されません。
背景を透過させたい時は、Spinner本体のpopupBackgroundパラメータをいじればいいみたいです。

<Spinner
  android:popupBackground="#ccffffff"
/>

ドロップダウンリストの区切り線をいじる

stylesを新しく定義してthemeに当てます。
values/styles.xml

<style name="textSinnerStyle" parent="android:style/Widget.ListView.DropDown">
  <item name="android:divider">#ff0000</item>
  <item name="android:dividerHeight">5dp</item>
/>

values/themes.xml

<style name="SampleTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:dropDownListViewStyle">@style/testSpinnerStyle</item>
</style>