最近在搞Android开发,慢慢地也记录一些开发中遇到的问题吧。
问题描述:
当界面中有多个EditText时,系统弹出的软键盘的确认键会显示"Next"这样可以方便用户快速进行内容的填写。但是现在的需求是,比如有2个EditText,第2个EditText不允许用户编辑,而是要显示一些hint类的文字上去。当然你可以把第2个EditText换成label,但是我们今天想要解决的是,如何在焦点到第2个EditText的时候把键盘隐掉。
无论是在XML文件中设置focus为false,还是在代码中设置enable为false,都没有办法。似乎只要监测到界面有多个EditText,键盘就会显示NEXT,然后点击NEXT之后,键盘就没办法隐去了。
所以使用的是一个比较tricky的办法,当EditText获取到焦点事件时,强制隐藏键盘。
先上代码吧:
editText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) { // 隐藏键盘 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(recharge_money.getWindowToken(), 0); return true; } return false; } });
editText是我们上面举的例子中的第2个EditText,设置它的OnKeyListener的method,然后当监听到相应的事件时,强制执行隐藏键盘的动作。
之所以说这种方法是比较tricky的办法,因为它有缺陷,比如你的界面中还有多余的EditText,那么当你焦点到第2个时候,键盘就被强制隐去了,用户必须继续手动点击第3个键盘才ok;另外,如果只有2个EditText,在第一个为焦点时,键盘显示的依旧是Next,而不是理想情况下的OK或者GO等内容。