关于输入法的弹出和隐藏

最近做项目碰到一个比较难解决的问题,就是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));
    if(hasFocus == true)
    {

      imm.showSoftInput(edt, InputMethodManager.SHOW_FORCED);
    }
    else

     {
      imm.hideSoftInputFromWindow(edt.getWindowToken(), 0);
    }
  }

  如果是单个界面,上面有EditText和其他控件,按照网上说法,应该是程序一启动EditText会自动获取焦点然后弹出输入法,可是我在模拟器和真机上都没出现过这种情况,然后按照网上的说法,让EditText得到焦点就可以了,可是添加了requestFocus后还是不能成功,设置android:focusable="true"也不行,后来在Activity的onCreate函数中添加

Timer timer = new Timer();
timer.schedule(new TimerTask(){

@Override
public void run() {
InputMethodManager m = (InputMethodManager)
edt.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}

}, 1000);
}

后,在加载页面后输入法会弹出。

转载于:https://my.oschina.net/u/1020095/blog/118189

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值