的EditText失去焦点使用硬键盘的时候TabHost存在于活动(EditText losing

2019-07-30 04:21发布

我在里面显示的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上里面(这是它应该?)。 此外,在操作栏搜索视图的情况下,完全超出标签。

Answer 1:

重写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.
    }
}


文章来源: EditText losing focus using hard keyboard when TabHost is present in activity