Keyboard Type は、Androidにおける仮想キーボードの設定で、特定の入力フィールドに表示する文字セットとレイアウトを定義します。Androidは多数のプリセットタイプをサポートしています:text(標準テキスト)、number(数字)、phone(電話)、email(@記号付き)、textPassword(パスワード用)、datetimeなど。各タイプは特定のタスクに合わせて入力インターフェースを最適化します。例えば、メールキーボードはメイン画面に@記号とドットを表示します。Android Developers (2026) によると、適切なKeyboard Typeを選択すると、標準のテキストキーボードと比較してキーストローク数が20~40%削減されます。
重要なポイント
Keyboard Type は、XMLのandroid:inputType属性値またはコード内のsetInputType()のプログラムによる呼び出しで決定されます。InputTypeはビットマスクであり、入力クラスが修飾子フラグと組み合わされます。基本クラスは次のとおりです:テキスト用のTYPE_CLASS_TEXT、数値用のTYPE_CLASS_NUMBER、電話用のTYPE_CLASS_PHONE、日付と時刻用のTYPE_CLASS_DATETIME。
各 Keyboard Type は3つの側面に影響します:仮想キーボードのレイアウト(メイン画面に表示される文字)、入力文字のフィルタリング(許可される文字)、および自動修正/自動補完の動作。たとえば、数字キーボードは数字と小数点区切りのみを表示し、ユーザーが大文字/小文字を切り替えても文字は表示されません。Android Developers Documentation (2026) によると、クラスとフラグを組み合わせることで、高度に特殊化されたモード(自動修正付き複数行テキスト、浮動小数点数、自動補完対応パスワードなど)を作成できます。
Keyboard Type は入力システム(IME)への推奨事項であることを理解することが重要です。一部のサードパーティキーボード(Gboard、SwiftKey)は、ユーザーが独自の設定を行っている場合、指定されたタイプを部分的に無視することがあります。ただし、ほとんどの標準AndroidキーボードとGoogle Gboardは指定された入力タイプに厳密に従います。
// プログラムによるキーボードタイプの設定
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
TYPE_CLASS_TEXT はテキスト入力の基本クラスです。文字、数字、記号を含む標準のQWERTYキーボードを有効にします。テキストクラスには、動作を調整する最も多くの修飾子があります:TYPE_TEXT_FLAG_CAP_SENTENCES(文頭の自動大文字)、TYPE_TEXT_FLAG_AUTO_CORRECT(自動修正)、TYPE_TEXT_FLAG_MULTI_LINE(複数行モード)、TYPE_TEXT_FLAG_NO_SUGGESTIONS(候補表示の無効化)。
テキストキーボード の修飾子は組み合わせて正確な設定を作成できます。たとえば、text|textCapSentences|textAutoCorrectは、自動大文字化とタイプミス修正が必要なコメント入力フィールドに適しています。一方、text|textNoSuggestionsは、自動修正が有害となる可能性があるコードや専門用語の入力に使用されます。
UX Stack Exchange (2025) によると、自動修正を有効にしたテキストキーボードは、平均的なユーザーのタイピング速度を15~25%向上させますが、技術用語(コード、URL、メール)の場合は、自動修正が正しい用語を誤った用語に置き換えることが多いため、自動修正を無効にすることをお勧めします。
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"
<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"
TYPE_CLASS_NUMBER は数字キーボードを有効にし、数字、小数点区切り、マイナス記号のみを表示します。このタイプは、数量、価格、年齢、コード、その他の数値データの入力フィールドに使用されます。数字キーボードはテキストキーボードよりも画面スペースを取らず、誤った文字入力を排除します。
Number には3つの修飾子があります:TYPE_NUMBER_FLAG_DECIMALは小数点/カンマを追加、TYPE_NUMBER_FLAG_SIGNEDは負の数のマイナス記号を追加、TYPE_NUMBER_VARIATION_PASSWORDはPINコード用(数字が非表示文字として表示)。number|numberDecimal|numberSignedの組み合わせにより、任意の符号の浮動小数点数を入力するための完全なフィールドが作成されます。
// 小数点付き数値入力
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// 入力された数値を確認
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0
TYPE_CLASS_PHONE は電話キーボードを有効にし、電話番号に特徴的な数字と記号(+、#、*、(、))を表示します。数字キーボードとは異なり、phoneは追加モードで文字レイアウトも表示します。電話番号には文字が含まれる場合があるためです(例:1-800-FLOWERS)。phoneクラスに追加フラグはありませんが、内線番号入力用のTYPE_TEXT_VARIATION_PHONE_ETCをサポートしています。
TYPE_TEXT_VARIATION_EMAIL_ADDRESS はメールキーボードを有効にし、@記号とドットがメイン画面に表示され、一般的なドメイン拡張子(.com、.net、.org)も利用可能です。Gboardは@の後に入力すると、人気ドメインのボタンを追加で表示します。メールキーボードは自動修正を自動的に無効にします。メールアドレスには非標準の文字組み合わせが含まれる可能性があるためです。
Google Material Design Guidelines (2025) によると、電話フィールドには、許可される文字セットを制限するandroid:digits属性を追加で指定することをお勧めします。メールフィールドには、パスワードマネージャーやGoogle Autofillからの自動補完をサポートするためにautofillHints="email"を指定することも重要です。
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"
<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"
TYPE_TEXT_VARIATION_PASSWORD と TYPE_NUMBER_VARIATION_PASSWORD は機密データ用の入力モードです。textPasswordが設定されると、入力された文字はドットやアスタリスクで表示されます(Androidのバージョンとキーボードによって異なります)。このモードでは、キーボードは自動修正とユーザー辞書への単語保存を無効にし、予測入力機能によるパスワード漏洩を防ぎます。
Password キーボードは、フィールドコンテンツのスクリーンショット機能(FLAG_SECUREフラグ)も無効にしますが、この動作は特定のキーボードの実装に依存します。Android 8.0(API 26)以降、importantForAutofill="yes"属性が設定されている場合、パスワードキーボードはパスワードマネージャーを介した自動補完をサポートします。
Android Security Recommendations (2025) によると、パスワードフィールドには以下も推奨されます:非常に長いパスワード(データベース攻撃のベクターになる可能性がある)を防ぐためにmaxLengthを設定する、ユーザーがフォーム送信前に入力したパスワードを確認できるように、inputType="textPassword"をTextInputLayoutおよびendIconMode="password_toggle"と一緒に使用する。
<!-- Password field with show/hide icon -->
@+id/tilPasswordField
app:endIconMode="password_toggle">
@+id/etPasswordField
android:inputType="textPassword"
android:maxLength="64"
android:importantForAutofill="yes" />
</com.google.android.material.textfield.TextInputLayout>
Keyboard Type のプログラムによる設定により、コンテキストやユーザー入力に応じてキーボードモードを動的に変更できます。たとえば、フィールドタイプ(テキスト/数値/日付)の切り替え時やロケールの変更時などです。setInputType()メソッドはInputTypeビットマスクを受け取り、フィールドがフォーカスされている場合は即座にキーボードを更新します。
// テキスト入力と数値入力を切り替え
fun switchInputType(field: EditText, isNumeric: Boolean) {
field.inputType = if (isNumeric) {
InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
}
field.setSelection(field.text.length)
}
// フィールドが数値かどうかを確認
fun isNumericInput(field: EditText): Boolean {
val type = field.inputType
return (type and InputType.TYPE_MASK_CLASS) ==
InputType.TYPE_CLASS_NUMBER
}
// 自動修正が有効かどうかを確認
fun isAutoCorrectEnabled(field: EditText): Boolean {
return (field.inputType and
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}
よくある質問
inputType が指定されていない場合、EditTextはデフォルトでTYPE_CLASS_TEXTとTYPE_TEXT_FLAG_MULTI_LINEフラグを使用します。これは標準のQWERTYキーボードと複数行入力を意味します。ほとんどのフィールドでは、キーボードの適切な動作と文字フィルタリングを確保するために、inputTypeを明示的に指定することをお勧めします。
EditTextで android:imeOptions="actionDone" 属性を使用します。これにより、EnterボタンがDoneボタンに置き換わります。他のオプション:actionSearch(虫眼鏡)、actionNext(右矢印)、actionSend(送信)。押下処理はコード内のOnEditorActionListenerを介して実装します。
特定のフィールドのバイブレーションを無効にすることはできません。これはキーボード設定でユーザーが制御するシステム設定です。ただし、EditTextに android:focusable="false" 属性を設定するか、dispatchTouchEventで表示をオーバーライドすることで、キーボードが完全に表示されないようにすることはできます。
android:inputType="none" を設定するか、プログラムで editText.setKeyListener(null) を呼び出します。フィールドはテキストを表示しますが、フォーカスしてもキーボードは表示されません。ユーザーはテキストの選択とコピーができますが、編集はできません。代替案として、textIsSelectable="true" のTextViewを使用する方法もあります。
setInputType() を呼び出した後、システムがIMEを自動的に更新しない場合があるため、キーボードを再度表示する必要があります。InputMethodManager.restartInput(view) を呼び出して強制的に更新します。フィールドがフォーカスされていない場合は、最初にrequestFocus()を呼び出し、次にrestartInputを呼び出します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。