软键盘手动控制弹出与关闭

最近一直在做搜索页面,为了提高用户的体验,需要自动弹出和关闭软键盘。本以为是件简单的事,结果网上的东西尽是些有问题的,要么就是弹不出,要么就是第一次可以弹出,但第二次就弹不出了。经过本人的多次实验,终于整理出了弹出和关闭软键盘的较好的方法。

1.弹出软键盘

//获取焦点,只有这样才有效
mViewDataBinding.editSearchContent.requestFocus();
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);           

这两句代码可以直接弹出软键盘,但是第二次调用时就没有作用了。如果使用网上说的showSoftInput方法的话,是需要在View完成了绘制后才会有效。

//这里需要延迟请求,但是不知道为什么,即使我延迟请求了也没用,郁闷。
InputMethodManager inputManager =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(mViewDataBinding.editSearchContent, 0);

所以结合两种方法的特点,如果我们需要在Activity开始时就显示软键盘,则可以第一次时使用第一种方法,以后需要显示的化就使用第二次的方法,即:

//判断是否是第一次请求
if (isFirst) {
			//获取焦点,否则请求无效
            mViewDataBinding.editSearchContent.requestFocus();
            //设置当获得焦点时弹出软键盘
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            isFirst = false;
        } else {
        	mViewDataBinding.editSearchContent.requestFocus();
        	//以后的请求直接调用showSoftInput方法就行了
            InputMethodManager inputManager =
                    (InputMethodManager) getSystemService(
                            Context.INPUT_METHOD_SERVICE);
            inputManager.showSoftInput(mViewDataBinding.editSearchContent, 0);
          	//移动光标到EditText的最后
            mViewDataBinding.editSearchContent.setSelection(mViewDataBinding.editSearchContent.getText().length());
        }
}

这样的就能完美的控制软键盘的显示了。

2.关闭软键盘

关闭软键盘就没有那么多坑了直接用网上比较常用的就行了。

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值