android – EditText没有收到TAB键事件 – stock soft vk

前端之家收集整理的这篇文章主要介绍了android – EditText没有收到TAB键事件 – stock soft vk前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用程序有一个ListView和一个位于它下面的EditText.由于某种原因,TAB键不会触发onKeyListener.我正在处理的所有其他键(DEL,ENTER,DPAD_UP / DOWN / CENTER)都很好.我在dispatchKeyEvent中添加了一个断点,再次没有运气接收TAB事件.

我的应用程序以前有一个用于显示文本的大型TextView,在此期间,TAB事件被收到了. ListView现在已经替换了TextView.

我完全不知道为什么不再接收TAB事件.这是一个库存Xoom,运行ICS 4.0.4&股票N1,2.3.6.

我将当前代码与使用TextView的版本进行了比较,而且大部分代码只是为了处理TextView而不是TextView.除了nextFocusLeft和nextFocusRight属性之外,EditText没有其他任何改变.

编辑:我刚尝试使用Go Keyboard和Hacker的键盘,TAB收到了.看起来这只是一些虚拟键盘

解决方法

我想我可能会看到这个问题.查看ListView. java的源代码,有一种机制可以使用在列表项中移动焦点的键事件.查看此方法之前的注释以及方法中间的注释块.
/**
 * To avoid horizontal focus searches changing the selected item,we
 * manually focus search within the selected item (as applicable),and
 * prevent focus from jumping to something within another item.
 * @param direction one of {View.FOCUS_LEFT,View.FOCUS_RIGHT}
 * @return Whether this consumes the key event.
 */
private boolean handleHorizontalFocusWithinListItem(int direction) {
    if (direction != View.FOCUS_LEFT && direction != View.FOCUS_RIGHT)  {
        throw new IllegalArgumentException("direction must be one of"
                + " {View.FOCUS_LEFT,View.FOCUS_RIGHT}");
    }

    final int numChildren = getChildCount();
    if (mItemsCanFocus && numChildren > 0 && mSelectedPosition != INVALID_POSITION) {
        final View selectedView = getSelectedView();
        if (selectedView != null && selectedView.hasFocus() &&
                selectedView instanceof ViewGroup) {

            final View currentFocus = selectedView.findFocus();
            final View nextFocus = FocusFinder.getInstance().findNextFocus(
                    (ViewGroup) selectedView,currentFocus,direction);
            if (nextFocus != null) {
                // do the math to get interesting rect in next focus' coordinates
                currentFocus.getFocusedRect(mTempRect);
                offsetDescendantRectToMyCoords(currentFocus,mTempRect);
                offsetRectIntoDescendantCoords(nextFocus,mTempRect);
                if (nextFocus.requestFocus(direction,mTempRect)) {
                    return true;
                }
            }
            // we are blocking the key from being handled (by returning true)
            // if the global result is going to be some other view within this
            // list.  this is to acheive the overall goal of having
            // horizontal d-pad navigation remain in the current item.
            final View globalNextFocus = FocusFinder.getInstance().findNextFocus(
                    (ViewGroup) getRootView(),direction);
            if (globalNextFocus != null) {
                return isViewAncestorOf(globalNextFocus,this);
            }
        }
    }
    return false;
}

单个列表元素中是否有多个可聚焦项目?如果是这样,此代码将使用Tab键.如果是这种情况,那么您可能想要使一些项目不可聚焦或考虑另一种设计选项.

原文链接:https://www.f2er.com/android/314880.html

猜你在找的Android相关文章