ボタンをクリックした後、Androidキーボードを非表示にする必要があります。
これを行う方法の多くの例を見てきましたが、それらはすべて特定のeditTextオブジェクトを使用しているように見えます。
例えば.
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
私の問題は、画面を動的に構築しているため、たてがみの編集テキストフィールドがある可能性があることです。隠しているeditTextオブジェクトを指定することなく、キーボードを非表示にする方法はありますか。
代わりにレイアウトに設定することもできます。つまり:
_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);
_
キーボードを開かない場合や、キーボードを使用するとコードアプリを非表示にする場合にクラッシュするため、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 =====================//
問題がアクティビティにある場合、次のように機能します。
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
}
これは、イベントブロック内に記述されたときに特定と見なされるボタンクリックまたはその他のイベントでキーボードの非表示を処理します。
このコードを使用します
// 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);
}
edittext.onEditorAction(EditorInfo.IME_ACTION_DONE);
記録のために、@ 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) {
}
}
同じボタンを使用して入力を非表示にします。したがって、線形レイアウト、テキストビュー、またはその他の任意のコントロールは必要ありません。また、コードはより多くのボタンに再利用できます。
InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(rootView.getWindowToken(), 0);