下面的代码片段简单地隐藏了键盘:public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);}
您可以将其放在实用程序类中,或者如果要在活动中定义它,请避免使用活动参数,或调用hideSoftKeyboard(this).
最棘手的部分是什么时候叫它。您可以编写一个方法来迭代View在您的活动中,并检查它是否为instanceof EditText如果它不是注册setOnTouchListener所有的东西都会就位。如果您想知道如何做到这一点,这实际上是相当简单的。下面是您所做的工作,您可以编写如下所示的递归方法,实际上您可以使用它来做任何事情,比如安装自定义字体等等.这是方法public void setupUI(View view) {
// Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(MyActivity.this);
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}}
仅此而已,只需在您之后调用此方法即可。setContentView在你的活动中。如果您想知道您将传递哪个参数,则是id父容器的。分配id到父容器,如
...
打电话setupUI(findViewById(R.id.parent))仅此而已。
如果您想有效地使用它,您可以创建一个扩展Activity并将此方法放入应用程序中,并使应用程序中的所有其他活动扩展该活动并调用其setupUI()在onCreate()方法。
希望能帮上忙。
如果使用了多个活动,请定义公共id到父级布局,如 ...
然后将类扩展到Activity并定义setupUI(findViewById(R.id.main_parent))在其OnResume()并扩展该类,而不是“活动”in your program