EditTextとは何か、属性、そしてAndroidでの入力フィールドの操作

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

EditText は、ユーザーインターフェースでテキストを入力および編集するための基本的なAndroidコンポーネントです。TextViewを継承し、仮想キーボードまたは物理キーボードからの文字入力を可能にします。EditTextは、単一行および複数行テキスト、パスワード、数字、メールアドレス、電話番号など、多くのモードをサポートしています。Android Developers (2026) によると、EditTextは90%以上のAndroidアプリでフォーム、検索フィールド、チャット、データ入力画面の作成に使用されています。

重要なポイント

  • EditText はAndroidの基本的なテキスト入力コンポーネントで、TextViewのサブクラスです。
  • 入力モード — テキスト、数字、パスワード、メール、電話、複数行入力をサポートします。
  • XML属性 — inputType、maxLines、hint、textColorHintなどのパラメータで設定します。
  • リスナー — TextWatcher(変更追跡)とOnEditorActionListener(アクション処理)。
  • Material Design — TextInputLayoutがフローティングラベルとエラーメッセージでEditTextを拡張します。

AndroidにおけるEditTextとは

EditText は、android.widgetパッケージのクラスで、ユーザーデータ入力のためのインタラクティブなテキストフィールドを実装します。Androidの継承階層において、EditTextはTextViewを拡張するため、フォント、色、配置の管理を含むテキストラベルのすべてのプロパティを継承します。EditTextとTextViewの主な違いは、コンテンツを編集できることです — ユーザーはインターフェース上で直接テキストを入力、削除、変更できます。

EditText は、入力されたテキストを保存し、挿入、削除、置換操作をサポートするEditableインスタンスに関連付けられています。タイプ入力時、EditTextは自動的にカーソル位置、テキスト選択、元に戻す/やり直しの変更履歴を管理します。Android Developers Guide (2026) によると、EditTextはAutoCompleteTextViewクラスを通じてオートコンプリートもサポートしており、これはEditTextを継承しています。

EditText のアーキテクチャは、モデル(Editable)、ビュー(TextView)、コントローラー(InputConnection)の分離に基づいています。フォーカスを取得すると、EditTextはInputConnectionを作成し、それを通じて入力システムが文字、キー押下、編集コマンドを渡します。このメカニズムにより、仮想キーボードから物理Bluetoothキーボード、音声入力まで、あらゆる入力方式との互換性が確保されます。

kotlin
val editText = EditText(context).apply {
    hint = "テキストを入力"
    inputType = InputType.TYPE_CLASS_TEXT
    maxLines = 1
    setTextColor(Color.parseColor("#000000"))
}

EditTextの主要属性

EditText は、動作と外観を微調整するための多数の属性を提供します。これらはXMLレイアウトでもKotlinやJavaを介したプログラム的にも設定できます。属性は、テキスト制御、制約、視覚的スタイリング、キーボード操作のカテゴリに分類されます。

属性説明値の例
android:hint空のフィールドに表示されるヒントテキスト"メールを入力"
android:inputType入力モード(テキスト、数字、パスワードなど)textEmailAddress
android:maxLines最大行数3
android:maxLength文字単位の最大テキスト長100
android:textColorHintヒントテキストの色#999999

android:hint 属性は最も重要なものの一つです — フィールドにどのデータが期待されるかをユーザーに伝えます。テキストが入力されると、ヒントは自動的に非表示になります。ヒントはフォーム送信に関与せず、フィールド値として保存されません。Material Designでは、よりモダンな外観のために、単純なヒントの代わりにフローティングラベル付きのTextInputLayoutを使用することを推奨しています。

  • android:selectAllOnFocus — フォーカス取得時にすべてのテキストを選択(検索フィールドに便利)。
  • android:maxLength — 入力文字数を制限し、超過分を切り捨てます。
  • android:lines — フィールドの高さを行数で固定設定します(minLinesとは異なります)。
  • android:gravity — フィールド内のテキスト配置: left、center、topなど。
xml
                <!-- EditText in XML layout -->
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="yes" />

入力モードとinputType

inputType 属性は、ユーザーに表示されるキーボードの種類と、入力に許可される文字を決定します。これはビットマスクであり、入力クラス(TYPE_CLASS_TEXT、TYPE_CLASS_NUMBER、TYPE_CLASS_PHONE)が修飾子と組み合わされます。

入力モード はキーボードレイアウトを変更するだけでなく、テキスト処理にも影響します。数値モードでは数字と小数点区切りのみ許可され、メールモードでは@記号とドメイン拡張子が利用可能で、電話モードでは数字と+、#、*記号が表示されます。適切なinputTypeの選択はユーザーエクスペリエンスに重大な影響を与えます — 不適切なキーボードはユーザーにモード切り替えを強制し、フォーム入力時間を30〜50%増加させます。

Material Design Guidelines (2025) によると、各フィールドに最も具体的なinputTypeを使用することが推奨されています。パスワードにはtextPassword、価格にはnumberDecimal、電話番号にはphone、複数行入力にはtextMultiLineです。これによりフォーム入力が高速化し、入力エラーが減少します。

kotlin
// プログラム的なinputType設定
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_AUTO_CORRECT

EditTextのリスナー: TextWatcherとOnEditorActionListener

TextWatcher は、EditTextのテキスト変更をリアルタイムで追跡するためのインターフェースです。3つのメソッドを含みます。beforeTextChangedは変更前に呼び出され、onTextChangedは変更中に呼び出され、afterTextChangedはテキスト変更完了後に呼び出されます。TextWatcherは入力検証、文字数カウント、検索、オートコンプリートに使用されます。

OnEditorActionListener は、キーボードでのユーザーアクションを処理します。Done(IME_ACTION_DONE)、Search(IME_ACTION_SEARCH)、Send(IME_ACTION_SEND)、Next(IME_ACTION_NEXT)などの押下を処理します。このリスナーはフォームナビゲーションの整理に特に便利です — Nextを押すと自動的に次のフィールドにフォーカスが移動し、Doneを押すとキーボードが非表示になって送信が実行されます。

Android Developers Blog (2025) によると、android:imeOptions属性とOnEditorActionListenerを適切に使用することで、追加の送信ボタンなしで直感的なフォームを作成できます — ユーザーはフィールドに入力してキーボードのDoneを押すだけで、保存や検索がトリガーされます。

kotlin
// メール検証用のTextWatcher
editText.addTextChangedListener(object : TextWatcher {
    override fun afterTextChanged(s: Editable?) {
        val isValid = Patterns.EMAIL_ADDRESS.matcher(s).matches()
        editText.error = if (isValid) null else "Invalid email format"
    }
})

// フォーム送信用のOnEditorActionListener
editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        submitForm()
        true
    } else false
}

EditTextのコード例

メールとパスワード入力に EditText を使用したログイン画面の完全な例を見てみましょう。この例では、inputTypeの設定、TextWatcherによる検証、ログインボタン押下の処理を示しています。

ログイン画面のXMLレイアウト

xml
@+id/etLoginEmail
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"
android:maxLines="1" />

@+id/etLoginPassword
android:layout_width="match_parent"
android:hint="Password"
android:inputType="textPassword"
android:maxLines="1" />

EditTextのプログラム的設定

kotlin
class LoginFragment : Fragment() {
    private lateinit var etEmail: EditText
    private lateinit var etPassword: EditText

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        etEmail = view.findViewById(R.id.etLoginEmail)
        etPassword = view.findViewById(R.id.etLoginPassword)

        etEmail.addTextChangedListener(emailWatcher)
        etPassword.setOnEditorActionListener { _, actionId, _ ->
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                performLogin()
                true
            } else false
        }
    }
}

EditTextのスタイリング

EditText は、XML属性、テーマ、スタイルを通じてカスタマイズをサポートしています。テキストの色、ヒントの色、下線の色(backgroundTint)、フォントスタイル、テキストサイズなどを変更できます。Material Componentsは、boxStrokeColor、boxBackgroundColor、endIconModeを含むカスタム属性を持つMaterialComponents.EditTextテーマを提供します。

EditText の下線の色を変更するには、android:backgroundTint属性を使用します。これはデフォルト状態とフォーカス状態の色を設定します。Material Designでは、下線の色はテーマのcolorPrimaryを通じて管理されます。完全なカスタマイズには、res/drawableフォルダーに背景用のカスタムdrawableを作成できます。

スタイル属性結果
テキストの色android:textColor入力テキストの色を変更
ヒントの色android:textColorHintヒントテキストの色を変更
下線android:backgroundTintフィールド下の線の色を変更
フォントサイズandroid:textSizeテキストサイズをspで設定
フォントandroid:fontFamilyカスタムフォントを適用

アプリ内のすべての EditText フィールドに一貫したスタイルを作成するには、テーマにグローバルスタイルを定義することをお勧めします。Material DesignはWidget.MaterialComponents.TextInputLayout.OutlinedBoxスタイルを提供しており、TextInputLayoutを使用するすべての入力フィールドに自動的に適用されます。これにより、各レイアウトで属性を重複させることなく、一貫した外観が保証されます。

よくある質問

EditTextとTextViewの違いは何ですか?

EditText はTextViewを継承し、テキスト編集機能を追加します。TextViewはテキストを表示するだけですが、EditTextはユーザーがコンテンツを入力、削除、変更することを可能にします。EditTextはinputType、TextWatcher、カーソル管理、その他のデータ入力関連機能もサポートしています。

EditTextで特定の文字を制限するには?

InputFilter を使用します — 入力文字をフィルタリングするためのインターフェースです。EditTextはsetFilters()メソッドを通じてフィルターの配列設定をサポートしています。例えば、InputFilter.LengthFilterはテキスト長を制限し、カスタムInputFilterは特定の文字、正規表現、Unicode範囲を制限できます。

コードでEditTextからテキストを取得するには?

Kotlinでは editText.text.toString()、Javaでは editText.getText().toString() を呼び出します。textプロパティはEditableを返し、toString()でStringに変換されます。特に必須フィールドのあるフォームでは、テキストを使用する前に必ずnullや空値を確認してください。

EditTextを複数行にするには?

android:inputType="textMultiLine" 属性を設定するか、プログラム的にInputType.TYPE_TEXT_FLAG_MULTI_LINEフラグを追加します。複数行モードでは、EditTextはEnterによる改行を許可し、自動的に高さが拡張されます。高さを制限するにはandroid:maxLinesまたはandroid:minLinesを使用します。

EditTextを編集不可にするには?

android:enabled="false" 属性を設定するか、コードで editText.isEnabled = false を呼び出します。無効化されたEditTextはタッチに反応せず、フォーカスを取得できず、グレー表示(無効状態)になります。代替案としてandroid:focusable="false"を使用すると、入力は無効になりますが通常の外観は維持されます。

まとめ

  • EditText はAndroidの基本的なテキスト入力コンポーネントで、編集機能を持つTextViewのサブクラスです。
  • inputType はキーボードモードと許可文字を決定します: テキスト、数字、メール、電話、パスワード。
  • TextWatcher は検証とオートコンプリートのためにテキスト変更をリアルタイムで追跡できます。
  • OnEditorActionListener はキーボードアクションを処理します: Done、Search、Next、Send。
  • InputFilter はカスタムフィルターを通じて入力文字とテキスト長を制限します。
  • 属性(hint、maxLines、maxLength、textColorHint)は動作と外観を設定します。
  • Material Design のTextInputLayoutによるスタイリングは、フローティングラベルとエラー表示でモダンな外観を提供します。

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

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

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

こちらもお読みください