EditTextに自動でカーソルをあてたくない場合の対処法

  • このエントリーをはてなブックマークに追加

特に考慮せず、Activityのレイアウトを作成するとAndroidは自動認識で一番初めのEditTextにカーソルをあてる動作をします。この機能は非常に便利ではありますが、時と場合によっては避けたいケースがあります。そんな時の対処法の紹介です。

左図のように画面起動時にAndroidの初期動作として画面一番初めのEditTextにカーソルがあたってしまう。どうにかしてカーソルがあたらない状態で画面を起動したい。

EditTextにカーソルやフォーカスを適用させない方法は非常に簡単でxmlファイルの記述だけで済みます。以下のようにandroid:cursorVisibleとandroid:focusableInTouchModeを「false」にすることで
Androidの自動認識でEditTextにカーソルやフォーカスがあたることを防ぐことができます。

しかし、ここで大きな問題点があります。

xmlファイルで上記設定をしてしまうと該当EditTextには二度とカーソルやフォーカスが適用できなくなってしまいます。カーソルやフォーカスが適用されないことを仕様とする場合は上記設定だけでいいわけですが、そうでない場合は困ります。

自動認識のカーソルやフォーカス適用だけ防ぎ、任意で適用させる為にはActivity側のjavaコードで対応することができます。簡単に言うと、EditTextのタッチイベントでフォーカスを有効にしてあげればいいわけですね。

こんな感じで記述します。

edt1 = (EditText)findViewById(R.id.edt1);

edt1.setOnClickListener(new OnClickListener() {
      @OverRide
      public void onClick(View v) {
           v.setFocusable(true);
           v.setFocusableInTouchMode(true);
           v.requestFocus();
    
           InputMethodManager  im = 
                  (InputMethodManager)setSystemService(Context.INPUT_METHOD_SERVICE);
           if (null != im) {
                   im.showSoftInput(v,0);
           }
     }
});

InputMethodManagerの記述は入力用キーボードを表示させる為に必要なコードです。

以上で画面起動時のカーソルやフォーカスの適用を防ぐ方法、および必要な時にカーソル、フォーカスを適用させる方法の解説となります。

SNSでもご購読できます。

コメントを残す

*