【Android開発】スピナー(Spinner)の文字サイズの変更方法

本日、実際にAndroidアプリ「魚かな、野菜かな」に反映を行ったスピナーの文字サイズを変更する方法についてまとめました。

本対応の目的

Androidの標準部品でスピナーを実装すると、文字サイズが固定されてxml上でtextSize等を指定しても反映されません。標準部品1

標準部品2

本対応を行うことで、下記のようにスピナー未選択時の文字もドロップダウンで表示される文字も意図したサイズを指定することが出来るようになります。

修正後1

修正後2

layoutの準備

メインのレイアウトファイル。特に変わった点はありません。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

スピナー用のレイアウトファイル。スピナーのテキストサイズ等を指定します。

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="@dimen/sp_m"
    android:ellipsize="marquee" />

スピナーのドロップダウン用レイアウトファイル。ドロップダウンのテキストサイズ等を指定します。

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/dp_m"
    android:textSize="@dimen/sp_m"
    />

valuesの準備

文言用ファイル。スピナー内に表示する文字列をarray形式で保持しておきます。

<resources>
    <string name="app_name">Sample</string>

    <string-array name="spinner_list">
        <item>選択肢1</item>
        <item>選択肢2</item>
        <item>選択肢3</item>
    </string-array>

</resources>

dimen用ファイル。文字サイズ、余白サイズをまとめて指定します。

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
    <!-- 文字サイズ(小) -->
    <dimen name="sp_s">20sp</dimen>
    <!-- 文字サイズ(中) -->
    <dimen name="sp_m">30sp</dimen>
    <!-- 文字サイズ(大) -->
    <dimen name="sp_l">40sp</dimen>
    <!-- 余白などのサイズ(小) -->
    <dimen name="dp_s">4dp</dimen>
    <!-- 余白などのサイズ(中) -->
    <dimen name="dp_m">8dp</dimen>
    <!-- 余白などのサイズ(大) -->
    <dimen name="dp_l">16dp</dimen>
</resources>

Java側の記載

ここまで準備できたら後はJava側で下記のように指定すればOKです。

package jp.co.skys.android.sample;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class spinnerSample extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //ポイント①「android.R.layout.simple_spinner_item」ではなく、自作のレイアウト「spinner_item.xml」を指定する
        //これによりスピナー内のtextSize等を個別に設定できるようになる。
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item,getResources().getStringArray(R.array.spinner_list));

        //ポイント②「android.R.layout.simple_spinner_dropdown_item」ではなく、自作のレイアウト「spinner_dropdown_item.xml」を指定する
        //これによりスピナーを選択した際のドロップダウンリストのtextSize等を個別に設定出来るようになる。
        adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);

        Spinner spinner = (Spinner) findViewById(R.id.spinner);

        spinner.setAdapter(adapter);

        // スピナーのアイテムが選択された時の動作を設定
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id) {
                //スピナー内のアイテムが選択された場合の処理をここに記載
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                //スピナーでは呼ばれない模様。ただし消せないので「おまじない」として残す。
            }
        });
    }
}

おまけ

上記一式含まれるファイルを下記よりダウンロードできます。
spinnerSample.zip
以上、ご参考まで

コメントは受け付けていません。

サブコンテンツ

公開中のAndroidアプリ(全て無料です)

ビジネス

おじさんのメモ帳 おじさんのメモ帳
シンプルなメモ帳
日報 日報
日報作成補助ツール
議事録 議事録
議事録作成補助ツール

学習(国語・算数)

漢字かな 漢字かな
漢字の読みの学習に
ひらがなプラス ひらがなプラス
かな・カナの学習に
暗算百問 暗算百問
毎日暗算で頭の体操
あんざん25 あんざん25
両手で計算してみよう

学習(理科・社会)

記号かな 地図記号
地図記号の学習に
魚かな 魚かな
海の生物の学習に
動物かな 動物かな
陸上の生物の学習に
野菜かな 野菜かな
植物な食物の学習に
元素記号 元素記号
元素記号の学習に

その他

こづかい帳 こづかい帳
計算力と金銭感覚を育もう
お絵かきプラス お絵かきプラス
メモや絵日記等に

このページの先頭へ