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

【Android開発】EditTextの入力を検証する方法|InputFilterで入力制限を実装しよう

この記事では、AndroidアプリでEditTextの入力内容を検証(バリデーション)する方法を、サンプルコードとともにわかりやすく解説します。「英字・数字・アンダースコアのみ入力を許可したい」といったケースを想定し、InputFilterインターフェースと正規表現を使ったカスタムフィルターの実装手順を順番に見ていきましょう。

手順1:新しいプロジェクトを作成する

Android Studioを起動し、メニューからFile → New Projectを選択して新規プロジェクトを作成します。必要な項目をすべて入力して、プロジェクトのセットアップを完了させてください。

手順2:レイアウトファイル(res/layout/activity_main.xml)にコードを追加する

まずは画面レイアウトです。EditTextを配置するシンプルな構成にします。hint属性でユーザーに入力形式を伝えるヒントを表示しておくと、UXの向上にもつながります。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_margin="16dp"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter alpha-numeric text"
        android:inputType="text"
        tools:ignore="Autofill" />
</RelativeLayout>

手順3:ValidateFilter.java を作成する

次に、入力値を検証するためのカスタムクラス ValidateFilter.java をsrcディレクトリに作成し、以下のコードを追加します。InputFilterを実装したこのクラスでは、正規表現パターンに一致しない文字が入力されたタイミングで自動的に除外する仕組みになっています。

package app.tutorialspoint.com.sample;

import android.text.InputFilter;
import android.text.Spanned;
import android.util.Log;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidateFilter implements InputFilter {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
                               int dstart, int dend) {
        for (int i = start; i < end; i++) {
            String checkMe = String.valueOf(source.charAt(i));
            Pattern pattern =
                Pattern.compile("[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789_]*");
            Matcher matcher = pattern.matcher(checkMe);
            boolean valid = matcher.matches();
            if (!valid) {
                Log.d("", "invalid");
                return "";
            }
        }
        return null;
    }
}

手順4:MainActivity.java にコードを追加する

続いて、アクティビティ側でEditTextを取得し、setFilters()メソッドを使って先ほど作成したフィルターを適用します。これだけで、EditTextに対してリアルタイムの入力チェックが有効になります。

package app.tutorialspoint.com.sample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.InputFilter;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText editText = findViewById(R.id.editText);
        editText.setFilters(new InputFilter[]{ new ValidateFilter()});
    }
}

手順5:AndroidManifest.xml にコードを追加する

最後に、マニフェストファイルの設定を確認しておきましょう。

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

    <uses-permission android:name="android.permission.CALL_PHONE" />

    <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に接続しているものとして説明を進めます。Android Studioでプロジェクト内の任意のアクティビティファイルを開き、ツールバーのRunアイコンをクリックしてください。接続中のモバイルデバイスを選択してアプリを起動すると、端末上に以下のような画面が表示されます。

【Android開発】EditTextの入力を検証する方法|InputFilterで入力制限を実装しよう

フィルターが正しく機能していれば、許可されていない記号や特殊文字を入力してもEditTextには反映されません。正規表現のパターン部分を変更すれば、メールアドレス用や電話番号用など、さまざまな入力制限に応用できますので、ぜひ自分の用途に合わせてカスタマイズしてみてください。

  1. 【Android】URLをエンコードする方法をわかりやすく解説|URLEncoderの使い方

    AndroidでURLをエンコードするには? 本記事では、AndroidアプリでURLを適切にエンコードする方法を、実際に動作するサンプルコードとともに解説します。 URLに検索キーワードなどのパラメータを含めたい場合、スペースや日本語などの特殊文字がそのまま含まれていると、正しくリクエストが送信できないことがあります。そんなときに役立つのが java.net.URLEncoder クラスです。このクラスを使えば、文字列をUTF-8などでエンコードし、URLとして安全な形式に変換できます。 手順1:新しいプロジェクトを作成する Android Studioを起動し、メニューから「File」→

  2. 【Android開発】Switchウィジェットのスタイルをカスタマイズする方法を徹底解説

    Android Switchウィジェットのスタイルをカスタマイズする方法 このチュートリアルでは、AndroidアプリのSwitch(スイッチ)ウィジェットの見た目を自由にカスタマイズする方法を紹介します。thumb(つまみ)とtrack(レール)に独自のDrawableを指定することで、ON/OFFの状態に応じてデザインが切り替わるオリジナルスイッチを作成できます。 ステップ1:新規プロジェクトを作成する Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成しましょう。 ステップ2:レイアウトフ