按钮单击后关闭键盘(如果没有关注EditText则中断)

时间:2013-08-24 06:43:50

标签: java android

我把它放在我的按钮监听器上:

InputMethodManager inputManager =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);

键盘启动时效果非常好:它关闭键盘然后继续执行。问题是,当没有按下EditText时(没有突出显示/聚焦),它会中断并且应用程序“停止工作”。

我想如果我能检查是否曾经按过EditText会很好。

我试着这样做来检查:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

if (imm.isActive()) // returns true if any view is currently active in the input method
{
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
}

修改

我最终这样做了:

我创建了这个方法:

public static void hideSoftKeyboard (Activity activity, View view) 
{
    InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0);
}

然后我在我的按钮监听器中调用method,如下所示:

hideSoftKeyboard(MainActivity.this, v); // MainActivity is the name of my class and v is the View I used in my button listener method.

2 个答案:

答案 0 :(得分:1)

你可以用这个:

您可以创建一个方法并在onCreate()方法上调用它:

public static void hideSoftKeyboard (Activity activity, View view) {
InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0);}

或者只是你可以像这样添加清单文件:

 <activity android:name="com.your.package.ActivityName"
  android:windowSoftInputMode="stateHidden"  />

答案 1 :(得分:0)

平庸/糟糕的解决方案,因为它不像我想要的那样通用:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

EditText x = (EditText)findViewById(R.id.editText);
x.requestFocus(); // this way no matter what, an EditText is focused on.

imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);