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

【Android】テキスト入力中にEditText内へImageView(アイコン)を表示する方法

この記事では、Androidアプリでテキストを入力している最中に、EditText内へImageView(ドローアブル画像)を表示させる方法を解説します。TextWatcherを活用することで、入力された文字数に応じて動的にアイコンを表示・非表示に切り替えることができます。

実装の流れ

全体の手順は以下の4ステップです。

  1. Android Studioで新規プロジェクトを作成する
  2. レイアウトファイル(activity_main.xml)にEditTextを配置する
  3. ドローアブルリソース(background.xml)で背景デザインを作成する
  4. MainActivityにTextWatcherを実装してアイコン表示を制御する

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

Android Studioを開き、File → New Project を選択して、必要な項目を入力して新しいプロジェクトを作成します。

ステップ2:レイアウトファイルの編集

res/layout/activity_main.xml に以下のコードを追加します。

<?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:orientation="vertical"
    android:gravity="center"
    android:layout_marginTop="30dp"
    tools:context=".MainActivity">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:paddingStart="5dp"
        android:background="@drawable/rounded_edittext"
        android:drawableStart="@android:drawable/ic_menu_search"
        android:paddingLeft="5dp" />
</LinearLayout>

上記のコードでは、EditTextを配置し、背景としてカスタムドローアブルを指定しています。

ステップ3:背景ドローアブルの作成

drawable/background.xml に以下のコードを追加します。白背景に青系の枠線、角丸10dpのデザインを定義しています。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="https://schemas.android.com/apk/res/android" >
    <solid android:color="#FFFFFF" />
    <stroke
        android:width="1dp"
        android:color="#2f6699" />
    <corners
        android:radius="10dp" />
</shape>

ステップ4:MainActivityの実装

java/MainActivity.java に以下のコードを追加します。TextWatcherの onTextChanged 内で、入力文字数が3文字以上になったタイミングで setCompoundDrawables() を呼び出し、EditText内に画像を表示しています。

package com.example.myapplication;

import android.annotation.TargetApi;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText editText = findViewById(R.id.edit_query);
        final Drawable image = MainActivity.this.getResources().getDrawable(R.drawable.sir);
        image.setBounds(0, 0, 40, 40);
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                editText.setCompoundDrawables(null, null, null, null);
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (count > 2 && count != 0)
                    editText.setCompoundDrawables(image, null, null, null);
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }
}

アプリの実行と動作確認

それではアプリを実行してみましょう。実機のAndroidスマートフォンをPCに接続している前提で説明します。Android Studioからプロジェクトのアクティビティファイルを開き、ツールバーの実行(Run)アイコンをクリックしてください。接続したデバイスを選択すると、アプリが起動して初期画面が表示されます。

【Android】テキスト入力中にEditText内へImageView(アイコン)を表示する方法

続いて、3文字以上のテキストを入力してみてください。入力に応じてEditText内に画像が表示されることが確認できます。

【Android】テキスト入力中にEditText内へImageView(アイコン)を表示する方法

まとめ

TextWatcherと setCompoundDrawables() を組み合わせることで、テキスト入力の状況に応じてEditText内のアイコンを動的に切り替えられます。検索ボックスの入力状態表示など、UX向上に役立つテクニックなので、ぜひ実際のアプリ開発で活用してみてください。

  1. Androidで2つの画像をオーバーレイしてImageViewに表示する方法

    このチュートリアルでは、Androidアプリで2つの画像を重ね合わせて(オーバーレイ)ImageViewに表示する方法を解説します。画像の重ね合わせには、複数のdrawableを積み重ねて描画できる「layer-list」というリソースを活用します。 ステップ1:Android Studioで新規プロジェクトを作成する Android Studioを起動し、「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。 ステップ2:レイアウトファイル(activity_main.xml)を編集する res/layout/activity

  2. Androidアプリでテキストファイルを簡単に読み込む方法【サンプルコード付き】

    この記事では、Androidアプリでシンプルなテキストファイルを読み込む方法を、実際のサンプルコードとともにステップごとに解説します。res/rawフォルダに配置したテキストファイルを読み込み、画面に表示するまでの一連の流れを学ぶことができます。 ステップ1:プロジェクトの作成とテキストファイルの配置 まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成しましょう。 続いて、新しいAndroidリソースディレクトリとして「raw」フォルダを作成し、読み込みたいテキストファ