InputType — その概要、入力属性とAndroidでの設定

著者: IT Sectr 公開日: 2026-07-07 読了時間: 9 分

InputType は、テキストフィールドの入力データの性質とキーボードの動作を決定するAndroidの属性です。InputTypeの値は、入力クラス(テキスト、数値、電話、日付)と修飾子(複数行、自動修正、大文字、非表示入力)を組み合わせたビットマスクです。InputTypeは、表示されるキーボードの種類、入力文字のフィルタリング、オートフィルの動作に影響を与えます。Android Developers (2026) によると、InputTypeは正確なデータ入力を保証するための最も重要な属性の一つであり、編集可能なすべてのテキストフィールドに明示的に設定する必要があります。

重要なポイント

  • InputType — EditTextの入力クラスと修飾子を定義するビットマスク。
  • 入力クラス — TYPE_CLASS_TEXT、TYPE_CLASS_NUMBER、TYPE_CLASS_PHONE、TYPE_CLASS_DATETIME。
  • 修飾子 — 動作を詳細化するフラグ:MULTI_LINE、AUTO_CORRECT、PASSWORD、CAP_SENTENCES。
  • 組み合わせ — クラスと修飾子はビット単位のORで結合され、正確な設定を実現。
  • 影響 — 正しいInputTypeは入力を高速化し、エラーを減らし、フォームのUXを向上。

AndroidにおけるInputTypeとは

InputType は、テキストフィールドの入力モードをエンコードする整数定数(Int)です。Androidでは、android.text.InputTypeクラスで定義されています。InputTypeの値は、入力クラス(ビット0~4)と修飾子(ビット5~31)の2つの部分で構成されます。入力クラスは基本データ型(テキスト、数値、電話、日付)を定義します。修飾子は選択されたクラス内での動作を詳細化します。例えば、テキストクラスでは、自動修正、大文字、複数行入力を有効にできます。

InputType メカニズムは3つのレベルで機能します:Androidフレームワークレベルでは、どのInputConnectionが作成されるか(EditTextとIME間の接続)を決定します。IME(キーボード)レベルでは、表示する文字と入力の処理方法を指定します。アプリケーションレベルでは、EditTextに組み込まれたInputFilterを通じて文字をフィルタリングします。Android Source Code (AOSP, 2026) によると、ビットマスクは現在の値を返すTextView.getInputType()メソッドと、内部フィルターとIME接続を再構成するsetInputType()で処理されます。

InputType の重要な特徴は、セキュリティ上の理由から別のプロセスから読み取ることができないことです。これにより、入力タイプへのアクセスによるデータ盗難(フィールドがパスワードかどうかの判別など)を防ぎます。別のアプリケーションからInputTypeを読み取ろうとすると、デフォルトでTYPE_CLASS_TEXTが返されます。

kotlin
// 基本的なInputType定数
InputType.TYPE_CLASS_TEXT       // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER     // 0x0002 = 2
InputType.TYPE_CLASS_PHONE      // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME   // 0x0004 = 4

// クラス抽出用マスク
InputType.TYPE_MASK_CLASS       // 0x0000000F

InputTypeクラス:TEXT、NUMBER、PHONE、DATETIME

Androidは4つの基本 InputType クラスを定義しています。各クラスは特定のデータカテゴリに対応し、対応するキーボードタイプをアクティブにします。クラスはビットマスクのビット0~4で指定され、TYPE_MASK_CLASS(0x0F)マスクで抽出できます。

クラス定数キーボード用途
TEXTTYPE_CLASS_TEXT (1)QWERTYキーボードテキスト、コメント、説明
NUMBERTYPE_CLASS_NUMBER (2)数字数量、価格、年齢
PHONETYPE_CLASS_PHONE (3)電話電話番号
DATETIMETYPE_CLASS_DATETIME (4)日付/時刻日付、時刻

TYPE_CLASS_DATETIME は直接使用されることはほとんどありません。日付入力には通常、テキストフィールドではなくDatePickerやDatePickerDialogが使用されます。ただし、一部のシナリオ(手動での素早い日付入力)では、このクラスが役立つ場合があります。専用のキーボードはなく、通常は数字キーボードを表示します。

各入力クラスはバリエーション(ビット5~7で指定されるサブタイプ)と組み合わせることができます。例えば、TYPE_TEXT_VARIATION_PASSWORD(ビット5)はTEXTクラスに非表示入力を追加します。バリエーションビット:0x000000E0(TYPE_MASK_VARIATIONマスク)。

InputType修飾子フラグ

修飾子フラグ(ビット8~31)は、基本クラスに追加機能を提供します。キーボードの種類は変更しませんが、入力動作を変更します。フラグは各クラスに固有です。TEXTフラグはNUMBERでは機能せず、その逆も同様です。以下に各クラスの主な修飾子を示します。

TEXTのフラグ

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — すべての文字を大文字に。
  • TYPE_TEXT_FLAG_CAP_WORDS — 各単語の先頭を大文字に。
  • TYPE_TEXT_FLAG_CAP_SENTENCES — 文の先頭を大文字に(デフォルト)。
  • TYPE_TEXT_FLAG_AUTO_CORRECT — 自動タイプミス修正。
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — オートコンプリート(AutoCompleteTextView用)。
  • TYPE_TEXT_FLAG_MULTI_LINE — 複数行入力。
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — 候補を無効化。

NUMBERのフラグ

  • TYPE_NUMBER_FLAG_SIGNED — 負の数を許可(マイナス記号)。
  • TYPE_NUMBER_FLAG_DECIMAL — 小数点を許可。

Android Developers Documentation (2026) によると、異なるクラスのフラグは重複しません。NUMBERでTEXTフラグを使用しようとすると無視されます。設定されたフラグを確認するには、ビット単位のANDを使用します:(inputType and FLAG) != 0。

InputTypeの組み合わせ:さまざまなシナリオの例

InputType のクラスとフラグの正しい組み合わせが、使いやすいフォームを作成する鍵です。典型的なシナリオとそれに対応するInputType設定を見てみましょう。各シナリオは特定のデータタイプの入力を最適化し、フォームを直感的にし、入力を高速化します。

シナリオInputTypeキーボード
名前textCapWordsQWERTY、各単語の先頭大文字
メールtextEmailAddressQWERTY(@と.付き)
パスワードtextPasswordQWERTY、非表示入力
電話phone数字(+、#、*付き)
価格numberDecimal数字(小数点付き)
数量number数字のみ
コメントtextCapSentences|textMultiLineQWERTY、複数行
検索text|textNoSuggestionsQWERTY(候補なし)
kotlin
// 価格フィールドの組み合わせ
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL

// コメントフィールドの組み合わせ
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_MULTI_LINE

InputTypeのプログラム操作

setInputType() でプログラム的に InputType を設定すると、以前の値が上書きされます。マスクの一部のみを変更する必要がある場合(フラグの追加など)、現在の値を保存し、変更してから再度適用する必要があります。setInputType() を呼び出すたびに、EditTextの内部フィルターが再構成されます。

setRawInputType() メソッドは、フィルターや候補の再構成をトリガーしない点でsetInputTypeと異なります。EditTextの状態を完全に再読み込みせずに、InputTypeを一時的に変更するために使用されます。setInputType() を呼び出した後は、IMEを再起動してキーボードを更新することをお勧めします。

モードの切り替え

kotlin
// パスワードと表示テキストの切り替え
fun togglePasswordVisibility(editText: EditText) {
    val currentType = editText.inputType
    val isPassword = (currentType and
        InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0

    editText.inputType = if (isPassword) {
        InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
    } else {
        InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_PASSWORD
    }

    // カーソル位置を維持
    val cursorPos = editText.selectionStart
    editText.setSelection(cursorPos)
}

クラスとバリエーションの抽出

kotlin
// 入力クラスを取得
fun getInputClass(inputType: Int): Int {
    return inputType and InputType.TYPE_MASK_CLASS
}

// 入力バリエーションを取得
fun getInputVariation(inputType: Int): Int {
    return inputType and InputType.TYPE_MASK_VARIATION
}

// パスワードフィールドか確認
fun isPasswordField(editText: EditText): Boolean {
    return (editText.inputType and
        InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}

InputType選択のベストプラクティス

適切な InputType を選択することは、UXだけでなく、セキュリティとデータの正確性にも関わります。主な推奨事項は次のとおりです:すべてのEditTextに明示的なInputTypeを常に指定する;可能な限り最も具体的な入力クラスを使用する;異なるクラスのフラグを組み合わせない;機密データフィールドにはPASSWORDバリエーションを使用する;検索フィールドにはimeOptions="actionSearch"を使用する。

InputType はアクセシビリティサービスの動作にも影響します。textPasswordタイプのフィールドは、スクリーンリーダーから追加の保護を受けます。入力された文字を読み上げません。textEmailAddressフィールドの場合、スクリーンリーダーはユーザーにフィールドが電子メール用であることを通知し、適切な候補を提供します。

  • 明示性 — 常にInputTypeを明示的に設定し、デフォルト値(textMultiLine)に頼らない。
  • 特異性 — 最も具体的なタイプを使用:メールにはtextではなくtextEmailAddress。
  • セキュリティ — パスワード、PIN、カードデータにはPASSWORDバリエーションを使用。
  • オートフィル — パスワードマネージャーをサポートするためにInputTypeとautofillHintsを組み合わせる。
  • テスト — 異なるキーボード(Gboard、SwiftKey、Samsung Keyboard)で動作をテスト。

Material Design Guidelines (2025) によると、InputTypeはユーザーが入力するデータのタイプと一致する必要があります。誤ったInputTypeは入力を遅くするだけでなく、エラーの原因にもなります。例えば、電話番号フィールドにtextMultiLineを残すと、キーボードは数字キーパッドを表示せず、ユーザーは毎回手動でレイアウトを切り替える必要があります。

よくある質問

InputTypeとKeyboard Typeの違いは何ですか?

InputType は、ビットマスクを通じて入力データのタイプを定義するEditTextの属性です。Keyboard Typeは、InputTypeによってアクティブ化される視覚的なキーボードタイプの非公式な名称です。InputTypeは、キーボードレイアウトだけでなく、文字フィルタリング、自動修正、オートコンプリートにも影響します。

InputTypeをデフォルト値にリセットするには?

editText.inputType = InputType.TYPE_CLASS_TEXT を設定するか、完全にリセットするには定数 InputType.TYPE_NULL(0x00000000)を使用します。TYPE_NULLの場合、フォーカス時にフィールドはキーボードを表示しません。標準のテキスト入力に戻すには、フラグなしでTYPE_CLASS_TEXTを設定します。

カスタムInputTypeを作成できますか?

InputTypeクラスはAndroidフレームワークの一部であるため、新しいクラスを作成することはできません。ただし、既存のクラスとフラグを組み合わせて、目的の動作を実現できます。setFilters() メソッドを使用してEditTextに設定される InputFilter を通じて、追加の文字フィルタリングを実装します。

InputTypeはIME(キーボード)にどのような影響を与えますか?

InputType はInputConnectionを介して入力システムに渡されます。IMEはInputTypeクラスとバリエーションを読み取り、対応するキーボードレイアウトを選択します。例えば、TYPE_CLASS_NUMBERとTYPE_NUMBER_FLAG_DECIMALを組み合わせると、キーボードは小数点付きの数字キーパッドを表示します。最新のキーボードのほとんどはこれらの推奨事項に従っています。

実行時にInputTypeを確認するには?

Kotlinでは editText.inputType プロパティ、Javaでは editText.getInputType() を使用します。クラスを抽出するには、マスクを適用します:inputType and InputType.TYPE_MASK_CLASS。特定のフラグを確認するには:inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — 結果が0以外の場合、フラグが設定されています。

まとめ

  • InputType — 入力クラス(TEXT、NUMBER、PHONE、DATETIME)と修飾子で構成されるビットマスク。
  • 入力クラス は基本データ型と表示されるキーボードの種類を定義。
  • 修飾子 は動作を詳細化:複数行、自動修正、大文字、非表示入力。
  • ビット単位のORによる組み合わせ で、さまざまなシナリオに正確な設定が可能。
  • PASSWORDバリエーション は自動修正を無効にし、文字を非表示にし、辞書への保存を防止。
  • プログラムによる設定 setInputType() では、IMEを再起動してキーボードを更新する必要がある。
  • ベストプラクティス — InputTypeを明示的に設定し、具体的なタイプを使用し、異なるキーボードでテストする。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください