我在里面显示的tabhost的EditText。 Tabhost是SherlockFragmentActivity内。
假设我在触摸模式,我点击的EditText给它集中,并开始打字就可以了。 键入字符2-3后,我决定用我的硬键盘。 只要按下第一硬键,我搬出去的触控模式,这也使焦点移回到当前选定的选项卡。 只要我不使用硬盘导航键带回的焦点我的EditText,我将无法键入的EditText。
当TabHost是不是里面TabActivity这个问题不仅造成。
一个快速的示例代码重现此问题可能是 - 的ActionBarSherlock示例代码FragmentTabs活动。 选择CustomTab并尝试键入使用硬键盘操作栏中搜索视图内的任何文字。 见焦点只需移动到标签。
问题是,在Android 2.2,4.0和使用ICS模拟器可重复的为好。
有没有人有更多的信息。 关于这个问题?
(一种解决方法似乎是这里提到: https://stackoverflow.com/a/8684025/333137但它看起来像一个黑客)
谢谢。
编辑:在更多的研究,我发现它需要好像里面TabActivity不使用TabHost被称为只类TabHost内设置()函数。 它注册接收仅在按下硬键回调的关键听众。
void setup(){
// KeyListener to attach to all tabs. Detects non-navigation keys
// and relays them to the tab content.
mTabKeyListener = new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_ENTER:
return false;
}
**mTabContent.requestFocus(View.FOCUS_FORWARD);**
return mTabContent.dispatchKeyEvent(event);
}
我不知道为什么它被调用requestFocus的(View.FOCUS_FORWARD),但这不会将焦点设置到EditText上里面(这是它应该?)。 此外,在操作栏搜索视图的情况下,完全超出标签。