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);
}

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

分类:

技术点:

相关文章:

  • 2021-09-08
  • 2022-12-23
  • 2022-01-16
  • 2022-12-23
  • 2022-12-23
  • 2021-07-20
  • 2021-06-07
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-09-08
  • 2021-12-27
  • 2021-10-08
  • 2022-02-09
相关资源
相似解决方案