Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidスピナーに初期デフォルトテキストを表示させる方法【コード例付き】

このチュートリアルでは、Androidアプリでスピナー(Spinner)ウィジェットを使い、ユーザーが何も選択していない初期状態に「デフォルトテキスト」を表示させる方法を解説します。「リストから選択してください」のようなガイド文をスピナーの初期値として設定したいケースで役立つテクニックです。

実装の全体像

実装のポイントは、スピナーに渡すデータリストの先頭(インデックス0)にガイド用テキストを追加することです。さらに選択イベント処理の中で、この先頭項目が選択されたときには通常の選択処理を行わないように分岐させます。以下、ステップ順に見ていきましょう。

ステップ1:新規プロジェクトの作成

Android Studioを起動し、「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目をすべて入力してプロジェクトを完成させてください。

ステップ2:レイアウトファイル(activity_main.xml)の編集

res/layout/activity_main.xml に以下のコードを追加します。タイトル用のTextViewとSpinnerを配置した、シンプルな縦方向のLinearLayout構成です。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/linearLayout"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Spinner Sample Program"
        android:layout_gravity="center"
        android:layout_marginTop="30dp"
        android:textSize="16sp"/>
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_gravity="center">
    </Spinner>
</LinearLayout>

ステップ3:MainActivity.java の編集

src/MainActivity.java に以下のコードを追加します。ここが本題の核心部分です。サッカー選手名のリストを作成し、add(0, "Select a player from the list") によってリストの先頭にガイド用テキストを挿入しています。こうすることで、アプリ起動直後のスピナーにはこのデフォルトテキストが表示されます。

また、setOnItemSelectedListener() で選択イベントを監視し、onItemSelected() 内では先頭のガイド文が選択された場合にのみ何もせず、実際の選手名が選択された場合だけToastで選択内容を表示するようにしています。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    Spinner spinner;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = findViewById(R.id.spinner);
        List<String> footballPlayers = new ArrayList<>();
        footballPlayers.add(0, "Select a player from the list");
        footballPlayers.add("Cristian Ronaldo");
        footballPlayers.add("Lionel Messi");
        footballPlayers.add("Neymar Jr");
        footballPlayers.add("Isco");
        footballPlayers.add("Gareth Bale");
        footballPlayers.add("Luis Suarez");
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, footballPlayers);
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(arrayAdapter);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if (parent.getItemAtPosition(position).equals("Choose Football players from lis")){
                }else {
                    String item = parent.getItemAtPosition(position).toString();
                    Toast.makeText(parent.getContext(),"Selected: " +item, Toast.LENGTH_SHORT).show();
                }
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
    }
}

ステップ4:AndroidManifest.xml の編集

androidManifest.xml に以下のコードを記述します。MainActivityをランチャーアクティビティとして登録する、標準的な構成です。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifet>

アプリを実行して動作を確認

それではアプリを実行してみましょう。実機のAndroidスマートフォンをPCに接続している前提で進めます。Android Studioでプロジェクトのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。接続したモバイル端末を選択すると、端末側に以下のような画面が表示されます。

Androidスピナーに初期デフォルトテキストを表示させる方法【コード例付き】


Androidスピナーに初期デフォルトテキストを表示させる方法【コード例付き】

まとめ

スピナーに初期デフォルトテキストを表示するには、データリストの先頭にガイド用の文字列を追加するのが最も簡単な方法です。あわせてonItemSelected()内で先頭項目かどうかを判定すれば、ガイド文が選択された際の意図しない処理を防ぐことができます。ドロップダウンの見た目をカスタマイズしたい場合は、独自レイアウトを用意してArrayAdapterに設定するのもおすすめです。

  1. AndroidでSDカードをデフォルトストレージにする方法|Adoptable Storageの設定手順と注意点

    スマートフォンの内部ストレージが少ない、または容量不足に悩まされるのは、誰にとっても避けたい問題です。毎日スマホを使い、撮影した写真や動画、インストールしたアプリなど、さまざまなデータを日々保存していくため、ストレージは確実に圧迫されていきます。近年のスマートフォンは128GB程度の大容量ストレージを搭載していることが多いものの、それでも容量不足に陥るケースは珍しくありません。しつこく表示される「空き容量が少なくなっています」という警告を解消するためにも、追加のストレージが必要になることは十分あり得ます。そこで登場するのが外部ストレージ(ポータブルストレージ)です。SDカードは容量不足を補うた

  2. AndroidでAlexaをデフォルトアシスタントに設定する方法【手順を解説】

    スマートフォンと自宅の両方で音声アシスタントを利用しているなら、設定を統一することで利便性が大きく向上します。たとえば、スマホではAndroid(Googleアシスタント)を使っているのに、プレゼントでもらったAmazon Echoも使い始めると、買い物リストやメモが2か所に分散してしまうことがあります。そんなときは、スマホのデフォルトアシスタントをGoogleアシスタントからAlexaに変更すれば、情報を一元管理できるようになります。 Alexaをデフォルトにするメリット Android端末でAlexaをデフォルトの音声アシスタントに設定すると、自宅のEchoで作成したリストに、外出先か