android - 当 TabHost 出现在 Activity 中时,EditText 使用硬键盘失去焦点

标签 android actionbarsherlock

我在 tabhost 中显示一个 EditText。 Tabhost 位于 SherlockFragmentActivity 中。

假设我处于触控模式,然后单击 EditText 使其获得焦点并开始在其上键入内容。输入 2-3 个字符后,我决定使用硬键盘。一旦按下第一个硬键,我就会退出触摸模式,这也会导致焦点移回当前选定的选项卡。只要我不使用硬导航键将焦点带回我的 EditText,我就无法在 EditText 中输入内容。

只有当 TabHost 不在 TabActivity 内时才会出现此问题。

重现此问题的快速示例代码可能是 - ActionBarSherlock 示例代码的 FragmentTabs Activity 。选择 CustomTab 并尝试使用硬键盘在操作栏的搜索 View 中键入任何文本。查看焦点只是移动到选项卡。

问题在 android 2.2、4.0 和使用 ICS 模拟器上也可重现。

有没有人有更多的信息。关于这个问题?

(这里似乎提到了一个解决方法:https://stackoverflow.com/a/8684025/333137 但它看起来像一个 hack)

谢谢。

编辑:经过更多调查, 我在 TabHost 类中找到了 setup() 函数,仅当 TabActivity 中未使用 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(它应该?)。此外,对于操作栏中的搜索 View ,它完全位于选项卡之外。

最佳答案

如下覆盖 TabHost,它对我有用。

public class TabHostExt extends TabHost {

    public TabHostExt(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TabHostExt(Context context) {
        super(context);
    }

    @Override
    public void onTouchModeChanged(boolean isInTouchMode) {
        // leave it empty here. It looks that when you use hard keyboard,
        // this method will be called and the focus will be token.
    }
}

关于android - 当 TabHost 出现在 Activity 中时,EditText 使用硬键盘失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11277491/

相关文章:

Android: SQLite Constraint failed 问题

java - Android 2指触摸触发1指触摸以及2指触摸

java - Android中保存UI状态

java - 在 Android 上从 Java 设置 splitActionBarWhenNarrow

android - getSherlockActivity() 与 getActivity()

android - 将 ShowCaseView 与 ActionBarCompat/ActionBarSherlock Android 结合使用

android - 通过代码更改 TabLayout 中的选项卡,有一个障碍

android - 如何在 Maven 中正确设置 actionbarsherlock 依赖项?

java - ActionBarSherlock 自定义 NavigationDrawer 图标

java - 从 Android Java 进程中获取或创建上下文