本文共 1330 字,大约阅读时间需要 4 分钟。
最近做项目碰到一个比较难解决的问题,就是tabhost中输入法总是会不按道理的出现或者隐藏起来单击出不来。目前已经解决了这个问题,总结一下。 首先,TabHost中输入法跟一般单个页面中的输入法弹出和隐藏是有区别的。在切换的时候有时候输入法会显示出来,这是我们不希望看到的。所以可以给tabHost添加一个setOnTabChangedListener监听器。然后再处理事件中通过
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myTabhost.getApplicationWindowToken(), 0);
其次,在切换中有时会遇到一个问题就是点击EditText控件输入法不弹出,点击其他控件再点击EditText后输入法才会出现。出现这种问题的可能是焦点的问题,解决办法是为EditText添加setOnFocusChangeListener,在这个处理事件中通过判断是否获得了焦点来处理各自的时间。
public void onFocusChange(View v, boolean hasFocus)
InputMethodManager imm = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));
imm.showSoftInput(edt, InputMethodManager.SHOW_FORCED);
imm.hideSoftInputFromWindow(edt.getWindowToken(), 0);
如果是单个界面,上面有EditText和其他控件,按照网上说法,应该是程序一启动EditText会自动获取焦点然后弹出输入法,可是我在模拟器和真机上都没出现过这种情况,然后按照网上的说法,让EditText得到焦点就可以了,可是添加了requestFocus后还是不能成功,设置 android:focusable="true"也不行,后来在Activity的onCreate函数中添加
Timer timer = new Timer();
timer.schedule(new TimerTask(){
InputMethodManager m = (InputMethodManager)
edt.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
转载地址:http://zbici.baihongyu.com/