当前很多Android应用并没有对输入法的弹出时机做出任何处理,但操作系统对此的处理并不智能,很多情况下用户想要关闭输入法时必须手动点击返回或者输入法的隐藏按钮,哪怕此时输入焦点已经不在输入框内。
我的办法是对当前页面的Layout添加一个OnTouch的响应事件,当点击输入框之外的地方时,触发响应事件,隐藏输入法窗口。关闭方法如下:
首先是一个继承监听接口的类:
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
/**
*
* 对输入法的显示进行管理,主要原理是触发外部Layout的OnTouch事件,隐藏输入法窗口
*/
public class MyInputTouchSet implements OnTouchListener {
boolean isShow;
InputMethodManager input;
public MyInputTouchSet(InputMethodManager _input, boolean _isShow){
this.input = _input;
this.isShow = _isShow;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (isShow) {
//显示输入法窗口,这个分支不要使用,当时想多了,系统会自动显示输入法窗口
//v.requestFocus();
input.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
}
else {
//隐藏输入法窗口
input.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
break;
default:
break;
}
//如果不拦截其他的touch事件,设为false好
return false;
}
}
然后,在你的Activity中添加响应
//焦点设置
InputMethodManager input = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);//得到InputMethodManager
//获得全局Layout窗口,设置响应事件
LinearLayout outerLayout = (LinearLayout)findViewById(R.id.outer_layout);
outerLayout.setOnTouchListener(new MyInputTouchSet(input, false));
如此,点击编辑框时,弹出了输入法,而点击编辑框之外时,输入法自动隐藏。