我正在 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 https://stackoverflow.com/a/8684025/333137但它看起来像一个黑客)
Thanks.
编辑:经过更多调查,
我在 TabHost 类中发现了 setup() 函数,仅当 TabHost 未在 TabActivity 中使用时才需要调用该函数。
它注册一个按键侦听器,仅在按下硬键时接收回调。
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 (它应该吗?)。此外,如果操作栏中的搜索视图,它完全位于选项卡之外。