今回は、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 からフォーカスを外してソフトウェアキーボードを非表示にする方法についてでした。
ご参考になれば幸いです。