mfkauko

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

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

posted on 2012-08-17 10:03  mfkauko  阅读(639)  评论(0编辑  收藏  举报