ボタンをクリックして外側にタッチしたときに Android ソフト キーボードをプログラムで非表示にする

ボタンをクリックして外側にタッチしたときに Android ソフト キーボードをプログラムで非表示にする
Java

Android ソフト キーボードの管理

Android アプリケーションを操作する場合、多くの場合、仮想キーボードを介したユーザー入力が必要になります。レイアウトに EditText と Button があるシナリオでは、キーボードを効果的に管理することが不可欠になります。具体的には、テキストを入力してボタンをクリックした後、ユーザー エクスペリエンスを向上させるためにキーボードを非表示にすることができます。

この記事では、ユーザーがキーボードの外側の領域を操作したときに Android ソフト キーボードをプログラムで閉じる方法の簡単で実用的な例を示します。ここで説明する手順に従うことで、Android アプリケーションの使いやすさとインターフェイスを向上させることができます。

指示 説明
getSystemService 入力メソッドを処理するためのInputMethodManagerなど、システムレベルのサービスを名前で取得します。
hideSoftInputFromWindow 現在入力を受け付けているソフト キーボード ウィンドウを非表示にするよう要求します。
getWindowToken キーボードを非表示にするために必要な、ビューに関連付けられたウィンドウ トークンを返します。
onTouchEvent タッチ スクリーン モーション イベントを処理します。ここでは、外部のタッチ時にキーボードを非表示にするために使用されます。
findViewById EditText や Button などの UI 要素を参照するために使用される、指定された ID を持つビューを検索して返します。
setOnClickListener ビューをクリックしたときに呼び出され、キーボードの非表示をトリガーするために使用されるコールバックを設定します。

実装を理解する

提供されているスクリプトは、UI を操作するとき、特にテキストを入力した後、Android ソフト キーボードをプログラムで非表示にする方法を示しています。 EditText フィールドをクリックして Button。 Java と Kotlin の例では、いくつかの主要な Android コンポーネントとメソッドを利用しています。どちらのスクリプトも、次のような必要なクラスをインポートすることから始まります。 ActivityContextInputMethodManager、およびさまざまな UI コンポーネント。の中に onCreate 方法、 findViewById をリンクするために使用されます EditText そして Button レイアウトからコードまで。の setOnClickListener 次に、メソッドをボタンに設定して、 hideKeyboard クリック時の機能。

どちらの実装でも、 hideKeyboard 関数の使用法 getSystemService を取得するには InputMethodManager サービス。方法 hideSoftInputFromWindow 次に、 getWindowTokenEditText ソフトキーボードを非表示にします。さらに、 onTouchEvent このメソッドは、ユーザーが入力フィールドの外側に触れたときにキーボードが非表示になるようにオーバーライドされます。このアプローチにより、キーボードが不必要にビューを妨げることがなくなり、ユーザー エクスペリエンスが向上します。これらのメソッドを使用し、タッチ イベントを適切に処理することで、スクリプトは Android アプリケーションのソフト キーボードの動作を効率的に管理します。

入力フィールドの外側のボタンのクリックおよびタッチで Android ソフト キーボードを非表示にする

Android 開発での Java の使用

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
 
public class MainActivity extends Activity {
    private EditText editText;
    private Button button;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        editText = findViewById(R.id.editText);
        button = findViewById(R.id.button);
 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                hideKeyboard();
            }
        });
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        hideKeyboard();
        return super.onTouchEvent(event);
    }
 
    private void hideKeyboard() {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    }
}

Kotlin を使用した Android でのソフト キーボードの終了の処理

Android アプリ開発に Kotlin を採用する

import android.app.Activity
import android.content.Context
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
 
class MainActivity : Activity() {
    private lateinit var editText: EditText
    private lateinit var button: Button
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        editText = findViewById(R.id.editText)
        button = findViewById(R.id.button)
 
        button.setOnClickListener { hideKeyboard() }
    }
 
    override fun onTouchEvent(event: MotionEvent): Boolean {
        hideKeyboard()
        return super.onTouchEvent(event)
    }
 
    private fun hideKeyboard() {
        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(editText.windowToken, 0)
    }
}

キーボード管理の高度なテクニックを探る

Android ソフト キーボードを非表示にする基本的な方法以外にも、開発者はより高度なテクニックを実装してユーザー エクスペリエンスを向上させることができます。そのような方法の 1 つは、以下を使用することです。 TouchListeners 複数の UI コンポーネントでタッチ イベントを検出し、それに応じてキーボードを非表示にします。このアプローチにより、ユーザーが画面の外側の部分を操作するときは常にキーボードが非表示になります。 EditText。さらに、キーボードの可視性の管理をフォーカス ロジックと組み合わせることができ、フォーカスがキーボードのキーボードから離れて移動されます。 EditText 別のコンポーネントに移動すると、キーボードが自動的に非表示になります。

もう 1 つのテクニックは、 View.OnFocusChangeListenerEditText。このリスナーは、 EditText フォーカスを失い、その後キーボードを非表示にします。この方法は、複数の入力フィールドが関係するフォームまたはデータ入力アプリケーションで特に役立ちます。さらに、よりシームレスなユーザー エクスペリエンスを実現するために、開発者は SoftKeyboardStateWatcher、キーボードの表示状態の変化を追跡し、それに応じて応答するカスタム実装です。このような高度な技術を統合することで、開発者はより直感的でユーザーフレンドリーな Android アプリケーションを作成できます。

Android ソフト キーボードの管理に関するよくある質問

  1. キーボードが表示されているか非表示になっているかを検出するにはどうすればよいですか?
  2. を使用できます SoftKeyboardStateWatcher キーボードの可視性の変化を追跡します。
  3. ユーザーがスクロールしたときにキーボードを自動的に非表示にすることはできますか?
  4. はい、実装できます OnScrollListener スクロール ビューで、スクロール中にキーボードを非表示にします。
  5. 次のときにプログラムでキーボードを表示できますか? EditText 集中していますか?
  6. はい、使用します InputMethodManager.showSoftInput キーボードを表示するには EditText 集中力が高まります。
  7. ユーザーが戻るボタンを押したときにキーボードを非表示にするにはどうすればよいですか?
  8. オーバーライド onBackPressed メソッドを使用してキーボードを非表示にします InputMethodManager
  9. キーボードのレイアウトをカスタマイズできますか?
  10. はい、Android ではカスタム キーボード レイアウトが可能です。 InputMethodService
  11. フラグメントでキーボードを非表示にする最良の方法は何ですか?
  12. 使用 getActivity().getSystemService を得るために InputMethodManager 断片的に。
  13. フラグメントを切り替えるときにキーボードを非表示にするにはどうすればよいですか?
  14. を実装します。 FragmentTransaction 切り替え中にキーボードを非表示にするリスナーを使用します。
  15. キーボードの非表示をアニメーション化することは可能ですか?
  16. はい、以下を含むビューをアニメーション化できます。 EditText 滑らかな隠蔽効果を生み出します。

重要なポイントの要約

直感的なアプリケーションを作成するには、Android ソフト キーボードを効果的に管理することが重要です。 getSystemService を使用して InputMethodManager を取得し、hideSoftInputFromWindow を使用してキーボードを非表示にすることで、開発者はキーボードの表示と非表示を制御できます。タッチ アンド クリック リスナーを実装すると、このコントロールがさらに洗練され、他の UI 要素と対話するときにキーボードが適切に非表示になります。これらの技術により、キーボードが重要なコンテンツや UI 要素を妨げることがなくなり、ユーザー エクスペリエンスが向上します。