我知道在Android中解雇键盘的代码是
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
如果我们触摸除了屏幕中键盘以外的文本区域以外的区域,任何人都可以建议我隐藏键盘的方法。
答案 0 :(得分:15)
关闭Softkeyboard的代码如下:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
您可以将它放在Utility Class中,或者如果您在活动中定义它,请避开activity参数,或者调用hideSoftKeyboard(this)。
您可以编写一个迭代活动中每个View的方法,并检查它是否是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();
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
在SetcontentView()
之后使用参数id
调用此方法,例如:
RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
然后拨打setupUI(findViewById(R.id.parent))
答案 1 :(得分:7)
使用的最佳方法是除了EditText 之外的DONE按钮,使 onClickListener 更像
done.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
}
});
答案 2 :(得分:6)
这可能已经过时但我通过实现自定义类
来实现这一点public class DismissKeyboardListener implements OnClickListener {
Activity mAct;
public DismissKeyboardListener(Activity act) {
this.mAct = act;
}
@Override
public void onClick(View v) {
if ( v instanceof ViewGroup ) {
hideSoftKeyboard( this.mAct );
}
}
}
public void hideSoftKeyboard(Activity activity) {
InputMethodManager imm = (InputMethodManager)
getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}
这里的最佳做法是创建一个Helper类,每个容器相对/线性布局都应该实现它。
****请注意,只有主要容器应该实现此类(用于优化)****
并像这样实现:
Parent.setOnClickListener( new DismissKeyboardListener(this) );
关键字是针对Activity的。因此,如果您使用片段,则可以像使用getActivity();
一样使用它---如果它对你有帮助的话...... ---欢呼拉尔夫---