Spinnerの文字の大きさを変える

Androidでコンボボックスを作成する場合はSpinnerを使用しますが、文字の大きさはSpinnerのtextSizeを変更しても変わりませんので、adapterから設定する方法を説明します。

res/layout/activity_main.xmlにSpinnerのViewを作成します。(この例ではid=tv0_t)

 <Spinner
    android:id="@+id/tv0_t"
    android:entries="@array/spn_ds_CR_78"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:spinnerMode="dialog"
/>
<aa>

android:spinnerModeは選択リストを表示する場所を指定します。 "dialog"と指定すると画面の真ん中に表示されます。 "DropDown"と 指定すると項目の場所に表示されます。

android:entriesには選択リストを指定します。

選択リスト はres/values/strings.xmlに作成します。

    <string-array name="spn_ds_CR_78">
        <item>bd _cr78_bassdrum</item>
        <item>hc1_cr78_hat_closed_01</item>
        <item>ho1_cr78_hat_open_01</item>
        <item>qu1_cr78_quid_01</item>
        <item>sd _cr78_snaredrum</item>
        <item>tam_cr78_tambourine</item>
        <item>wb1_cr78_woodblock_01</item>
    </string-array>

MainActivity.ktでspinnerの tv0_t にonItemSelectedListenerを指定します。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


    ・・・

        /////spinner item
        tv0_t.onItemSelectedListener = SpinnerSelectedListener()

    ・・・

   }
}

選択されたときに呼ばれる SpinnerSelectedListener()を MainActivity.kt の中に作成します。

    inner class SpinnerSelectedListener : AdapterView.OnItemSelectedListener {
        override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {

       if (parent === findViewById<View>(R.id.tv0_t)) {
                var s_tv0_t = tv0_t.getSelectedItem() as String
         // 選択された時の処理
            } 
        }

        // 何も選択されなかった時の動作
        override fun onNothingSelected(parent: AdapterView<*>) {}
    }

ここまでで普通のspinnerが使用できるかと思います。

表示される文字のサイズは、 spinner のプロパティを設定しても変更されませんので、変更する方法を説明します。

表示するための spinnerの項目のxmlを以下の内容でres/layoutにsp0.xmlで作成します。表示文字が表示しきれない場合、後ろに”...”が表示されますが、android:singleLine="true"の指定を外すと ”...” は表示されなくなります。

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          style="?android:attr/spinnerItemStyle"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:textSize="16sp"
/>

表示するための spinnerの選択リストのxmlを以下の内容でres/layoutにsp0_dd.xmlで作成します。

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        style="?android:attr/spinnerDropDownItemStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24sp"
/>

spinnerに sp0.xml と sp0_dd.xmlをArrayAdapterでセットして文字の大きさその他を設定できるようになります。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


    ・・・

        /////spinner item
        tv0_t.onItemSelectedListener = SpinnerSelectedListener()

        val adapter = ArrayAdapter.createFromResource(this, 
            R.array.spn_ds_CR_78, R.layout.sp0)
        adapter.setDropDownViewResource(R.layout.sp0_dd)
        tv0_t.setAdapter(adapter)


    ・・・


   }
}

Follow me!