web-dev-qa-db-ja.com

Android:ボタンをクリックした後にキーボードを非表示にする

ボタンをクリックした後、Androidキーボードを非表示にする必要があります。

これを行う方法の多くの例を見てきましたが、それらはすべて特定のeditTextオブジェクトを使用しているように見えます。

例えば.

InputMethodManager imm = (InputMethodManager)getSystemService(
      Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

私の問題は、画面を動的に構築しているため、たてがみの編集テキストフィールドがある可能性があることです。隠しているeditTextオブジェクトを指定することなく、キーボードを非表示にする方法はありますか。

24
Martin Shinks

代わりにレイアウトに設定することもできます。つまり:

_LinearLayout mainLayout;

// Get your layout set up, this is just an example
mainLayout = (LinearLayout)findViewById(R.id.myLinearLayout);

// Then just use the following:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mainLayout.getWindowToken(), 0);
_

これは、レイアウト上に配置されるEditTextオブジェクト(または他のオブジェクト)の数に関係なく、レイアウトが作成されることを前提とした例です。

編集:また、アクティビティが最初に起動したときにキーボードが非表示になるようにすることも非常に便利です(つまり、EditTextが最初にフォーカスされている場合)。それを行うには、これをActivityのonCreate()メソッドに入れます。

_ this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
_
46
burmat

キーボードを開かない場合や、キーボードを使用するとコードアプリを非表示にする場合にクラッシュするため、try catch blogの使用を忘れないでください

try {
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
} catch (Exception e) {
    // TODO: handle exception
}

次のコードを使用して、おそらくボタンクリックイベント:でキーボードを非表示にできます。

//================ Hide Virtual Key Board When  Clicking==================//

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow("Your Button/EditText Object".getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);

//======== Hide Virtual Keyboard =====================//
8
IntelliJ Amiya

問題がアクティビティにある場合、次のように機能します。

    try {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    } catch (Exception e) {
        // TODO: handle exception
    }

それ以外の場合、コードがフラグメントに必要な場合は、次を実行します

    try {
        InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
    } catch (Exception e) {
        // TODO: handle exception
    }

これは、イベントブロック内に記述されたときに特定と見なされるボタンクリックまたはその他のイベントでキーボードの非表示を処理します。

5

このコードを使用します

// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
3
Pankaj Talaviya
edittext.onEditorAction(EditorInfo.IME_ACTION_DONE);
2
Makvin

記録のために、@ burmatと@Prashant Maheshwari Androの回答に基づいています

次のようにクリックボタンを呼び出したとしましょう。ここで、buttonAndroidLogin_buttonはButtonオブジェクトです。

protected void onCreate(Bundle savedInstanceState) {
    // your code...
    buttonAndroidLogin_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            hideKeyboard((Button)v);
            // ....
} // end onCreate

アクティビティで、次のメソッドを設定する必要があります

public void hideKeyboard(View view) {
    try {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    } catch(Exception ignored) {
    }
}

同じボタンを使用して入力を非表示にします。したがって、線形レイアウト、テキストビュー、またはその他の任意のコントロールは必要ありません。また、コードはより多くのボタンに再利用できます。

1
magallanes
InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(rootView.getWindowToken(), 0);