2011-07-13 14 views
5

Tengo una actividad con muchos controles EditText y casillas de verificación cerca de ellos. Por defecto, la mayoría de los EditTexts están deshabilitados.El foco salta aleatoriamente al desplazarse

Cuando abro la actividad, algún control EditText aleatorio obtiene el foco (un marco alrededor) y si toca sobre él, aparece el teclado en pantalla aunque el EditText está desactivado y no aparece el texto cuando presiona el teclas de pantalla

Además, todo mi diseño está envuelto en un ScrollView. Cuando se desplaza, algunos aleatorios EditText s obtienen enfoque. Puede ser el visible más bajo, o el más visible, o a veces uno en el medio, a veces uno fuera del área visible.

Como un elemento aleatorio del diseño se enfoca, la actividad se desplaza aleatoriamente hacia abajo cuando la abre, lo cual es bastante molesto.

Supongo que es un error de Android, pero ¿hay alguna solución?

Stop EditText from gaining focus at Activity startup maneja la situación con solo 1 EditText por lo que puede decir que pierde el foco para que el elemento ficticio pueda obtenerlo. En mi caso, el elemento ficticio no gana foco, tanto en onResume como onCreate, con ambos android:focusable="true" android:focusableInTouchMode="true"

¿Debo verificar todos los controles de EditText (hay 12) y decirles que pierdan el foco? Lo que ocurre con el desplazamiento, porque parece que el enfoque aleatoriamente salta.

+0

Acabo de intentar llamar a clearFocus() y setSelected (false) en cada elemento EditText en el diseño. Esto no ayudó. Todavía algunos al azar uno se enfoca. – iseeall

+0

Después de algunas pruebas sobre esto, descubrió que no siempre es el foco que recibe al azar, sino el elemento EditText que tiene la misma posición y que el punto de contacto. No tiene que tocar exactamente el elemento en sí, sino a la derecha o a la izquierda de él y luego comenzar a desplazarse. Después de un tiempo, EditText tiene una alta probabilidad de obtener el foco, incluso si está desactivado (no editable) – iseeall

Respuesta

3

No se desplaza aleatoriamente el foco EditText. Es cuando la vista de desplazamiento maneja un evento fling. Si sobrescribe el método fling, no habrá ningún cambio de enfoque aleatorio.

Luego, si quieres recuperar la funcionalidad fling, deberás escribir tu propio método fling. Hay código aquí se puede copiar de:

Smooth scrolling in Android

+0

Muchas gracias. Lo intentaré – iseeall

+0

me enfrento al mismo problema de salto de enfoque. pero no puedo anular el desplazamiento suave en el código de Android. ¿Puede darme más detalles para resolver este problema? Gracias por adelantado. – sathish

4

Debido a la aplicación del método fling en el ScrollView - es suficiente para anular el findFocus(), de modo que le proporcione this para evitar que el enfoque de saltando cuando se desplaza.

@Override 
public View findFocus() { 
    return this; 
} 
+0

¿Cómo se hace esto sin subclasificar ScrollView? – SoloPilot

+0

imposible. tendrá que subclase 'ScrollView' – Skip

+0

Subclassing ScrollView no funcionó para mi problema. ¿Puede usted ayudar? Acabo de publicar mi pregunta en http://stackoverflow.com/questions/21240063/android-edittext-focus-jumps-to-another-inside-srollview – SoloPilot

Cuestiones relacionadas