今回は、Android アプリのフォーカスについてです。
EditText
に何かを入力した後、背景をタップしてもフォーカスが外れず、ソフトウェアキーボードが表示されたままになるので、背景をタップしてフォーカスが外れるように修正する方法についてご紹介します。
参考にさせていただいた記事はこちらから。
背景タッチでEditTextのフォーカスを外す – OKZ Blog
http://denpalove.blog.fc2.com/blog-entry-2.html
サンプルコードは下記のとおりです。
まず、xml
ファイルを変更していきます。
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:focusableInTouchMode="true" android:id="@+id/main_layout" android:padding="15dp" android:orientation="vertical"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/edit_text" /> </LinearLayout>
LinerLayout
を追加し、こちらに android:focusableInTouchMode="true"
を追加してください。
xml
の変更はこれだけです。
次に、Activity
にコードを追加していきます。
InputMethodManager inputMethodManager; private LinearLayout linearLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); linearLayout = findViewById(R.id.main_layout); }
@Override public boolean onTouchEvent(MotionEvent event) { // キーボードを隠す inputMethodManager.hideSoftInputFromWindow(linearLayout.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); // 背景にフォーカスを移す linearLayout.requestFocus(); return true; }
上記コードをそれぞれ追加すると、背景をタップした際に onTouchEvent
関数が呼び出され、フォーカスを EditText
から外す処理とソフトウェアキーボードが非表示にする処理が実行されます。
追加するコードは以上です。
以上、Android アプリで、背景をタップした時に EditText からフォーカスを外してソフトウェアキーボードを非表示にする方法についてでした。
ご参考になれば幸いです。