LoginSignup
2
0

invisible風のEditTextにfocusを当てようとした時にハマったこと

Last updated at Posted at 2023-11-24

本記事について

  • 「EditTextを配置した画面において、フォームは出したくないけど、画面表示時にキーボードが表示され入力可能な画面を作る」という要件で実装する機会があったのですが、
    キーボードを表示するためにEditTextにfocusを当てようとしてハマったことがあったので、メモ書き程度ですがまとめてみました。
    ("invisible風" についてはフォームは見えないけどフォーカスも当てられて、任意の文字列を入力できるという点から勝手にそう呼んでいます)

対応内容

  • 以下のような属性を指定したEditTextを用意します。(次項に記載のポイントが満たせていれば属性の設定値はアレンジ可能)
    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:inputType="numberPassword"
        android:maxLength="4"
        android:focusable="true"
        android:clickable="false"
        android:focusableInTouchMode="true"
        android:background="@null"
        android:textColor="@null"
        android:textColorHint="@null"
        android:cursorVisible="false"
        android:visibility="visible"
        android:autofillHints=""
        android:hint="" />
  • あとは任意のタイミングで、上記のEditTextに対して requestFocus() をコールすればOKです。
    • 今回は画面表示時にフォーカスが当たった状態にしたかったので、onViewCreated() 内でコールしました

ポイント

  • 以下を満たすことで、テキストエリアの(なんちゃって)非表示化 + 入力が可能となります。
    • layout_height およびlayout_width の値を 0dp 以上とすること
      • 値が 0 になってしまうとrequestFocus() のコール(直接Viewをタップした場合も同様)、フォーカスを当てられない状態になってしまいます
    • 標準で表示される部品を非表示とする
      • 入力欄の背景(=background)
      • カーソル(=cursorVisible)
      • ヒントテキスト(=autofillHints, hint, textColorHint)
      • 入力テキスト(=textColor)

追記

フォーカスが外れた状態からキーボードを明示的に表示する際、InputMethodManagerを利用しないとキーボードを表示することができませんでした。
正攻法なのかはわかりませんが、少なくとも要件を満たすにこの実装必要でした。

fun showKeyBoard(context: Context) {
    edit_text.requestFocus()
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.showSoftInput(edit_text, InputMethodManager.SHOW_IMPLICIT)
}

最後に

同様のことをするケースがあまりないからか調べてもなかなかヒットせず、ゴリ押し感が否めない対応となってしまったのですが、他にいい方法をご存知であれば教えていただけると幸いです :pray:

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0