Mono Works

チラシのすきま

メモ:inputType による入力の制限

画面の中に配置された入力欄。ここに入力する文字列は、ある程度制御できます。例えば、「電話番号の入力欄に数字とハイフンの入力以外は入力できないようにする」といったことが可能です。

androiddevmemo20151116_00

入力の制限方法については、レイアウトファイルの入力欄に属性をもたせる方法と、実行ファイル内で入力制限を設定する方法の2種類あります。

レイアウトファイル側で入力を制限する場合

レイアウトファイルで入力文字列を制限するには、入力欄の属性「android:inputType」に定数を設定します。下記の例では、「android:inputType = “textPassword”」と設定して、「EditText」に入力できる文字列を半角英数字に限定して、入力後の文字を見えないようにします。

レイアウトファイル(\app\src\main\res\layout\activity_main.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"/>

</LinearLayout>

android:inputType に設定できる定数は、“textPassword”の他にも、こちらにずらっと書かれています。

TextView  |  Android Developers

このページには、実行ファイルで記述する「制限の定義」についても併記されています。この「定義」を次に使います。

実行ファイル側で入力を制限する場合

上記ページに記載されているとおり、「textPassword」に対応する「制限の定義」は「TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD」で、下記の書式となります。

実行ファイル(\app\src\main\java\jp\co\monoworks\inputtypesumple\MainActivity.java)

package jp.co.monoworks.inputtypesumple;

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

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);</br>  EditText pswd = (EditText)findViewById(R.id.editText1);
        pswd.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);

    }
}

レイアウトファイル(\app\src\main\res\layout\activity_main.xml)には紐付け用のidを設定

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editText1"
        android:ems="10"/>

</LinearLayout>

実際の画面

レイアウトファイルに制限を設定する方法と実行ファイルに制限を設定する方法は、記述は違いますが、実際の画面と入力状況は同じです。どちらも、入力できる文字列を半角英数字に限定して、入力後にマスクしています。その画面がこちら。

androiddevmemo20151116_01

日本語入力IMEの場合

先ほど作ったサンプルをXperia Z3 Compact SO-02Gで実行してみると、日本語入力IMEを「POBox Plus」にして入力した場合、入力は半角英数記号に限定されて、全角文字は入力できません。ところが「Google日本語入力」を日本語入力IMEに設定して入力すると、初期状態こそ半角入力になってますが、入力モードを切り替えて全角のひらがなを入力できてしまいます。

このように、日本語入力環境で入力制限をも受ける場合、少し注意が必要なようです。

【参考サイト】

EditText | Android Developers

TextView | Android Developers

コメント

コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)
執筆者
"ぽぽろんち" @pporoch
pporoch120
Mono Worksの中の人。好きなことをつらつらと書き留めてます。
ギターを始めてから 練習動画をYouTubeにアップしてます。ご笑納ください。
"DQX@ぬここ(UD487-754)、コツメ(NO078-818)"
採用案内