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

【Kotlin入門】初期テキスト(デフォルト表示)付きAndroidスピナーの作成方法

この記事では、Kotlinを使用して、初期状態でガイド用のテキスト(プレースホルダー)を表示できるAndroidスピナーの作成方法を、サンプルコード付きでわかりやすく解説します。

スピナーは標準では最初の選択肢がそのまま表示されるため、「選択してください」のような案内文を初期表示させたいケースは多くあります。本記事の手順に従えば、リストの先頭にダミー項目を追加するだけで簡単に実装できます。

手順1:Android Studioで新規プロジェクトを作成する

まず、Android Studioを起動し、メニューから「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目(プロジェクト名、パッケージ名、保存先など)をすべて入力しましょう。言語はKotlinを選択してください。

手順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:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="30dp"
        android:text="Spinner Sample Program"
        android:textColor="@android:color/background_dark"
        android:textSize="16sp" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="10dp" />

</LinearLayout>

手順3:MainActivity.ktにスピナーの処理を実装する

続いて、src/MainActivity.ktに以下のコードを追加します。ポイントは、リストの先頭(インデックス0)に「Select a player from the list」というダミーの初期テキストを挿入している点です。これにより、アプリ起動直後にスピナーへ案内文が表示されます。

import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    lateinit var spinner: Spinner

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

        spinner = findViewById(R.id.spinner)

        // 選択肢となるリストを作成
        val footballPlayers: MutableList<String?> = ArrayList()

        // 先頭に初期表示用のダミーテキストを追加
        footballPlayers.add(0, "Select a player from the list")
        footballPlayers.add("Cristiano Ronaldo")
        footballPlayers.add("Lionel Messi")
        footballPlayers.add("Neymar Jr")
        footballPlayers.add("Isco")
        footballPlayers.add("Gareth Bale")
        footballPlayers.add("Luis Suarez")

        // ArrayAdapterを作成してスピナーにセット
        val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, footballPlayers)
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = arrayAdapter

        // 選択イベントのリスナーを設定
        spinner.onItemSelectedListener = object : OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
                if (parent.getItemAtPosition(position) == "Select a player from the list") {
                    // 初期テキストが選択されている場合は何もしない
                } else {
                    val item = parent.getItemAtPosition(position).toString()
                    Toast.makeText(parent.context, "Selected: $item", Toast.LENGTH_SHORT).show()
                }
            }

            override fun onNothingSelected(parent: AdapterView<*>?) {}
        }
    }
}

なお、onItemSelected()内では、選択された項目が初期テキストと一致する場合にトースト表示をスキップしています。これにより、ユーザーが実際にプレイヤーを選択したときだけ「Selected: ○○」というメッセージが表示される仕組みです。

手順4:AndroidManifest.xmlを確認する

最後に、androidManifest.xmlに以下の内容が正しく記述されていることを確認します。ここではMainActivityがランチャー(起動画面)として登録されています。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">

    <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>

</manifest>

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

それでは、実際にアプリを起動してみましょう。実機のAndroidスマートフォンをPCにUSB接続している前提で説明します。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーのRun(実行)アイコンをクリックしてください。

【Kotlin入門】初期テキスト(デフォルト表示)付きAndroidスピナーの作成方法

表示されたダイアログで接続中のモバイルデバイスを選択すると、実機にアプリがインストールされ、デフォルト画面が表示されます。

【Kotlin入門】初期テキスト(デフォルト表示)付きAndroidスピナーの作成方法

スピナーをタップすると選択肢の一覧が開き、任意のプレイヤーを選ぶとトーストで選択結果が表示されます。初期状態では「Select a player from the list」という案内文が表示されていることも確認できます。

【Kotlin入門】初期テキスト(デフォルト表示)付きAndroidスピナーの作成方法

まとめ

Kotlinでスピナーに初期テキストを表示するには、データリストの先頭にダミー項目を追加し、それが選択されている間は処理を行わないというシンプルな手法が有効です。ArrayAdapterとOnItemSelectedListenerの基本的な使い方も同時に学べるので、フォームや設定画面など、さまざまな場面で応用できます。ぜひ実際にプロジェクトを作成して試してみてください。

  1. Androidでマーキー(流れる)テキストを実装する方法【初心者向け解説】

    Androidアプリ開発では、ニュースティッカーやお知らせ表示などでよく使われる「マーキー(Marquee)」と呼ばれる、横方向にスクロールする流れるテキストを実装したい場面があります。この記事では、TextViewのプロパティを設定するだけで簡単にマーキーテキストを実現する方法を、ステップごとにわかりやすく解説します。実装手順ステップ1:新しいプロジェクトを作成するまず、Android Studioを起動し、「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目(プロジェクト名、パッケージ名、保存先など)を入力してプロジェクトをセットアップしましょう。ス

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

    このチュートリアルでは、Androidアプリでスピナー(Spinner)ウィジェットを使い、ユーザーが何も選択していない初期状態に「デフォルトテキスト」を表示させる方法を解説します。「リストから選択してください」のようなガイド文をスピナーの初期値として設定したいケースで役立つテクニックです。実装の全体像実装のポイントは、スピナーに渡すデータリストの先頭(インデックス0)にガイド用テキストを追加することです。さらに選択イベント処理の中で、この先頭項目が選択されたときには通常の選択処理を行わないように分岐させます。以下、ステップ順に見ていきましょう。ステップ1:新規プロジェクトの作成Android