浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

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

  • この記事いいね! (0)