【Android】テキスト入力中にEditText内へImageView(アイコン)を表示する方法
この記事では、Androidアプリでテキストを入力している最中に、EditText内へImageView(ドローアブル画像)を表示させる方法を解説します。TextWatcherを活用することで、入力された文字数に応じて動的にアイコンを表示・非表示に切り替えることができます。
実装の流れ
全体の手順は以下の4ステップです。
- Android Studioで新規プロジェクトを作成する
- レイアウトファイル(activity_main.xml)にEditTextを配置する
- ドローアブルリソース(background.xml)で背景デザインを作成する
- 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)アイコンをクリックしてください。接続したデバイスを選択すると、アプリが起動して初期画面が表示されます。

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

まとめ
TextWatcherと setCompoundDrawables() を組み合わせることで、テキスト入力の状況に応じてEditText内のアイコンを動的に切り替えられます。検索ボックスの入力状態表示など、UX向上に役立つテクニックなので、ぜひ実際のアプリ開発で活用してみてください。
-
Androidで2つの画像をオーバーレイしてImageViewに表示する方法
このチュートリアルでは、Androidアプリで2つの画像を重ね合わせて(オーバーレイ)ImageViewに表示する方法を解説します。画像の重ね合わせには、複数のdrawableを積み重ねて描画できる「layer-list」というリソースを活用します。 ステップ1:Android Studioで新規プロジェクトを作成する Android Studioを起動し、「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。 ステップ2:レイアウトファイル(activity_main.xml)を編集する res/layout/activity
-
Androidアプリでテキストファイルを簡単に読み込む方法【サンプルコード付き】
この記事では、Androidアプリでシンプルなテキストファイルを読み込む方法を、実際のサンプルコードとともにステップごとに解説します。res/rawフォルダに配置したテキストファイルを読み込み、画面に表示するまでの一連の流れを学ぶことができます。 ステップ1:プロジェクトの作成とテキストファイルの配置 まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成しましょう。 続いて、新しいAndroidリソースディレクトリとして「raw」フォルダを作成し、読み込みたいテキストファ