Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


EditText no recibe eventos clave TAB – stock soft vk

Mi aplicación tiene un ListView y un EditText sentado debajo de él. Por alguna razón, la tecla TAB no onKeyListener el onKeyListener . Todas las otras teclas que estoy manejando (DEL, ENTER, DPAD_UP / DOWN / CENTER) se reciben muy bien. He añadido un punto de interrupción en dispatchKeyEvent , de nuevo no hay suerte recibir eventos TAB.

Mi aplicación tenía anteriormente un TextView grande para mostrar texto y durante este tiempo, los eventos TAB se recibieron bien. El ListView ahora ha reemplazado el TextView .

Estoy completamente desconcertado por qué el evento TAB ya no se recibe. Esto está en un Xoom común, funcionando ICS 4.0.4 y acción N1, con 2.3.6.

He comparado mi código actual con la versión usando un TextView y gran parte del código es sólo para manejar el ListView en el lugar del TextView . Aparte de los nextFocusLeft y nextFocusRight , nada más ha cambiado para el EditText.

Edit: Acabo de probar con el teclado de Go y Hacker del teclado y TAB se recibe bien. Parece que esto es sólo con algunos teclados virtuales

One Solution collect form web for “EditText no recibe eventos clave TAB – stock soft vk”

Creo que puedo ver el problema. Observando el origen de ListView.java, existe un mecanismo para consumir eventos clave que cambian de foco dentro de un elemento de lista. Echa un vistazo a los comentarios que preceden a este método, así como el bloque de comentarios en el medio del método.

 /** * 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; } 

¿Hay varios elementos que se pueden enfocar dentro de un solo elemento de lista? Si es así, este código consumirá la tecla de tabulación. Si ese es el caso, entonces usted puede desear hacer algunos de los artículos unfocusable o considerar otra opción del diseño.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.