EditText does not accept TAB key events - soft vk shares

My application has ListView and EditText sitting under it. For some reason, the TAB key does not call onKeyListener . All the other keys that I process (DEL, ENTER, DPAD_UP / DOWN / CENTER) work just fine. I added a breakpoint to dispatchKeyEvent , again no luck getting TAB events.

My application previously had a large TextView for displaying text, and during this time TAB events were received fine. ListView now replaced TextView .

I am completely puzzled by why the TAB event is no longer accepted. It is in the Xoom warehouse, with the launch of ICS 4.0.4 and stock N1, from 2.3.6.

I compared the current code with the version using a TextView , and most of the code is designed to handle a ListView instead of a TextView . Other nextFocusLeft and nextFocusRight , nothing has changed for EditText.

Edit: I just tried with Go Keyboard and Hacker Keyboard, and the TAB worked out fine. It seems like it's only with some virtual keyboards

+7
source share
1 answer

I think I see the problem. Considering the source for ListView.java, there is a mechanism for using key events that change focus in a list item. Check the comments preceding this method, as well as the comment block in the middle of the method.

 /** * 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(), currentFocus, direction); if (globalNextFocus != null) { return isViewAncestorOf(globalNextFocus, this); } } } return false; } 

Are there several elements with the ability to focus inside one element of the list? If so, this code will use the tab key. If so, then you may want to make some of the elements inappropriate or consider another design option.

0
source

All Articles