【Android】背景をタップした際にEditTextのフォーカスを外す

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

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG