EditText は、ユーザーインターフェースでテキストを入力および編集するための基本的なAndroidコンポーネントです。TextViewを継承し、仮想キーボードまたは物理キーボードからの文字入力を可能にします。EditTextは、単一行および複数行テキスト、パスワード、数字、メールアドレス、電話番号など、多くのモードをサポートしています。Android Developers (2026) によると、EditTextは90%以上のAndroidアプリでフォーム、検索フィールド、チャット、データ入力画面の作成に使用されています。
重要なポイント
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キーボード、音声入力まで、あらゆる入力方式との互換性が確保されます。
val editText = EditText(context).apply {
hint = "テキストを入力"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText は、動作と外観を微調整するための多数の属性を提供します。これらはXMLレイアウトでもKotlinやJavaを介したプログラム的にも設定できます。属性は、テキスト制御、制約、視覚的スタイリング、キーボード操作のカテゴリに分類されます。
| 属性 | 説明 | 値の例 |
|---|---|---|
| android:hint | 空のフィールドに表示されるヒントテキスト | "メールを入力" |
| android:inputType | 入力モード(テキスト、数字、パスワードなど) | textEmailAddress |
| android:maxLines | 最大行数 | 3 |
| android:maxLength | 文字単位の最大テキスト長 | 100 |
| android:textColorHint | ヒントテキストの色 | #999999 |
android:hint 属性は最も重要なものの一つです — フィールドにどのデータが期待されるかをユーザーに伝えます。テキストが入力されると、ヒントは自動的に非表示になります。ヒントはフォーム送信に関与せず、フィールド値として保存されません。Material Designでは、よりモダンな外観のために、単純なヒントの代わりにフローティングラベル付きのTextInputLayoutを使用することを推奨しています。
<!-- 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 属性は、ユーザーに表示されるキーボードの種類と、入力に許可される文字を決定します。これはビットマスクであり、入力クラス(TYPE_CLASS_TEXT、TYPE_CLASS_NUMBER、TYPE_CLASS_PHONE)が修飾子と組み合わされます。
各 入力モード はキーボードレイアウトを変更するだけでなく、テキスト処理にも影響します。数値モードでは数字と小数点区切りのみ許可され、メールモードでは@記号とドメイン拡張子が利用可能で、電話モードでは数字と+、#、*記号が表示されます。適切なinputTypeの選択はユーザーエクスペリエンスに重大な影響を与えます — 不適切なキーボードはユーザーにモード切り替えを強制し、フォーム入力時間を30〜50%増加させます。
Material Design Guidelines (2025) によると、各フィールドに最も具体的なinputTypeを使用することが推奨されています。パスワードにはtextPassword、価格にはnumberDecimal、電話番号にはphone、複数行入力にはtextMultiLineです。これによりフォーム入力が高速化し、入力エラーが減少します。
// プログラム的なinputType設定
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
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を押すだけで、保存や検索がトリガーされます。
// メール検証用の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 を使用したログイン画面の完全な例を見てみましょう。この例では、inputTypeの設定、TextWatcherによる検証、ログインボタン押下の処理を示しています。
@+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" />
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 は、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を継承し、テキスト編集機能を追加します。TextViewはテキストを表示するだけですが、EditTextはユーザーがコンテンツを入力、削除、変更することを可能にします。EditTextはinputType、TextWatcher、カーソル管理、その他のデータ入力関連機能もサポートしています。
InputFilter を使用します — 入力文字をフィルタリングするためのインターフェースです。EditTextはsetFilters()メソッドを通じてフィルターの配列設定をサポートしています。例えば、InputFilter.LengthFilterはテキスト長を制限し、カスタムInputFilterは特定の文字、正規表現、Unicode範囲を制限できます。
Kotlinでは editText.text.toString()、Javaでは editText.getText().toString() を呼び出します。textプロパティはEditableを返し、toString()でStringに変換されます。特に必須フィールドのあるフォームでは、テキストを使用する前に必ずnullや空値を確認してください。
android:inputType="textMultiLine" 属性を設定するか、プログラム的にInputType.TYPE_TEXT_FLAG_MULTI_LINEフラグを追加します。複数行モードでは、EditTextはEnterによる改行を許可し、自動的に高さが拡張されます。高さを制限するにはandroid:maxLinesまたはandroid:minLinesを使用します。
android:enabled="false" 属性を設定するか、コードで editText.isEnabled = false を呼び出します。無効化されたEditTextはタッチに反応せず、フォーカスを取得できず、グレー表示(無効状態)になります。代替案としてandroid:focusable="false"を使用すると、入力は無効になりますが通常の外観は維持されます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。