アクションボタン

AndroidのEditTextにフォーカスしたとき表示されるキーボードの右下のキーをアクションボタンと言う。

デフォルトのアクションボタン

複数行テキストボックスのアクションボタンは改行

アクションボタンはフォーカスしているEditTextが改行を許可している場合(複数行の場合)は改行キーとなる。

複数行テキストのアクションボタン

1行テキストボックスのアクションボタンの変更方法

1行のテキストボックスにするにはEditTextのプロパティとしてandroid:singleLine="true"を指定する。

<EditText
  ...
  android:singleLine="true"
  ... />

この状態でandroid:imeOptionsプロパティを指定すると別のボタンに変更できる。

例えばandroid:imeOptions="actionNext"を指定すると次のテキストボックスへフォーカスを移動するボタンに変更できる。

<EditText
  ...
  android:singleLine="true"
  android:imeOptions="actionNext"
  ... />

次へ移動するボタン

アクションボタンの動的変更

Kotlinのコードで動的に変更するにはEditTextimeOptionsプロパティを更新する。

imeOptionsプロパティはEditorInfoIME_ACTION_*の中から選択する。

例えば、EditorInfo.IME_ACTION_DONEを指定した場合は

editText.imeOptions = EditorInfo.IME_ACTION_DONE

以下のようにチェックマークのボタンとなる。

doneボタン

イベントリスナでどのタイプのボタンを押されたかを判断する

アクションボタンを入力したときに、どのアクションボタンだったかを判断するにはEditText#setOnEditorActionListenerで受け取って調べる。

setOnEditorActionListenerに渡す無名関数の第2引数がimeOptionsで指定した値となっているので 例えば以下のように受け取れる。

editText.setOnEditorActionListener {_, actionId, _ ->
    when (actionId) {
        EditorInfo.IME_ACTION_DONE -> {
            println("done")
            true
        }
        EditorInfo.IME_ACTION_NEXT -> {
            println("next")
            true
        }
        else -> {
            println("otherwise")
            true
        }
    }
}