【Android】EditTextの文字数をカウントして制限する方法(TextWatcherの使い方)
Androidアプリ開発では、入力フィールド(EditText)に入力できる文字数を制限したいケースがよくあります。例えば、ユーザー名やパスワードなど、一定の文字数以内での入力を求めたい場面です。本記事では、TextWatcher(TextChangedListener)を使って、EditTextに入力された文字数をリアルタイムにカウントし、上限を超えた場合にエラーメッセージを表示する方法を解説します。
実装の流れ
ステップ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"
android:id = "@+id/parent"
xmlns:tools = "https://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity"
android:gravity = "center"
android:background = "#33FFFF00"
android:orientation = "vertical">
<EditText
android:id = "@+id/text"
android:textSize = "18sp"
android:layout_width = "match_parent"
android:layout_height = "wrap_content" />
</LinearLayout>このレイアウトでは、文字数チェックの対象となるEditTextを1つ配置しています。後述のコードにより、入力された文字数が5文字を超えるとエラーメッセージが表示される仕組みです。
ステップ3:MainActivity.javaの編集
続いて、src/MainActivity.java に以下のコードを記述します。
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
int view = R.layout.activity_main;
EditText text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(view);
text = findViewById(R.id.text);
text.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override
public void afterTextChanged(Editable s) {
if(s.toString().length()>5) {
text.setError("It allows only 5 character");
}else{
text.setError(null);
}
}
});
}
}コードの解説
ポイントとなるのは、addTextChangedListener() を使ってTextWatcherを登録している部分です。TextWatcherには以下の3つのコールバックメソッドがあります。
- beforeTextChanged(): テキストが変更される前に呼ばれる
- onTextChanged(): テキストが変更されている最中に呼ばれる
- afterTextChanged(): テキストの変更が完了した後に呼ばれる
今回は afterTextChanged() 内で入力テキストの長さを判定しています。文字数が5文字を超えた場合は setError() でエラーを表示し、5文字以下の場合は setError(null) でエラー表示を解除します。
text.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override
public void afterTextChanged(Editable s) {
if(s.toString().length()>5) {
text.setError("It allows only 5 character");
}else{
text.setError(null);
}
}
});動作確認
それでは実際にアプリを実行してみましょう。Android端末をPCに接続した状態で、Android Studioからツールバーの「Run」アイコンをクリックし、接続したデバイスを選択してアプリを起動します。
5文字以内で入力した場合は、特にエラーは表示されません。
しかし、6文字以上を入力すると、以下のように「5文字までしか入力できません」というエラーメッセージがEditTextの下に表示されます。

まとめ
TextWatcherを活用することで、EditTextへの入力内容をリアルタイムに監視し、文字数制限などのバリデーションを簡単に実装できます。より厳密に文字数を制限したい場合は、InputFilterを使用して物理的に入力を防ぐ方法もありますので、用途に応じて使い分けると良いでしょう。
-
Android EditTextが空かどうかを確認する方法【サンプルコード付きで解説】
このチュートリアルでは、Androidアプリ開発においてEditText(テキスト入力フィールド)が空かどうかを判定する方法を、実際にサンプルプロジェクトを作りながら段階的に解説します。ユーザー入力のバリデーションはアプリ開発の基本であり、空の入力を事前にチェックすることで、予期しないクラッシュや不正なデータ登録を防ぐことができます。 ポイント:TextUtils.isEmpty()メソッドを使う EditTextの内容が空かどうかを確認する最もシンプルな方法は、android.text.TextUtilsクラスが提供するisEmpty()メソッドを利用することです。このメソッドは、渡された
-
Androidで線を引く方法とは?Canvasを使った描画手順をステップ解説
この記事では、Androidアプリで線を描画する方法を、実際のサンプルコードとともにステップごとに解説します。BitmapとCanvasを組み合わせれば、ボタンをタップしたタイミングで画面上に線を簡単に描くことができます。 作成するアプリの概要 今回作成するのは、画面下部の「Draw Line」ボタンを押すと、中央のImageView上に赤い横線が表示されるシンプルなアプリです。レイアウトの定義、MainActivityへの処理の記述、マニフェストファイルの確認という流れで進めていきます。 ステップ1:新規プロジェクトを作成する Android Studioを起動し、「File」→「New P