Android中有EditText控件页面的输入法窗口管理

当前很多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));
如此,点击编辑框时,弹出了输入法,而点击编辑框之外时,输入法自动隐藏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值