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键.如果是这种情况,那么您可能想要使一些项目不可聚焦或考虑另一种设计选项.

相关文章

AdvserView.java package com.earen.viewflipper; import an...
ImageView的scaleType的属性有好几种,分别是matrix(默认)...
文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win1...
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由main...
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件...
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项...