Detener ScrollView de establecer el foco en EditText

Android ScrollView (cuando se desplaza o arroja) le gusta establecer el foco de un EditText cuando es uno de sus hijos. Sucede cuando te desplazas y luego sueltas. ¿Hay alguna forma de detener este comportamiento? Probé casi todo lo que podía pensar y todo lo que había leído en StackOverflow. Nada me ha funcionado. A continuación se muestra un diseño de ejemplo Si desea probarlo. Estoy desesperado por detener este comportamiento tonto.

     

Esto funciona. No estoy seguro de si es la mejor solución o no.

 // SCROLL VIEW HACK // BOGUS ScrollView view = (ScrollView)findViewById(R.id.scrollView); view.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); view.setFocusable(true); view.setFocusableInTouchMode(true); view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.requestFocusFromTouch(); return false; } }); 

Primero, puede eliminar el elemento primario de ScrollView. En segundo lugar, agregue opciones de enfoque para el niño (solo un niño por ScrollView):

 android:descendantFocusability="beforeDescendants" android:focusable="true" android:focusableInTouchMode="true" 

Así es como debe verse tu xml:

                

Además, tenga en cuenta que tiene varias identificaciones con el mismo nombre. Intenta darles nombres únicos.


Si solo desea ocultar el teclado virtual y dejar que EditText siga teniendo su foco, puede hacerlo agregando la siguiente propiedad a su actividad en manifiesto :

 android:windowSoftInputMode="stateHidden" 

ah, es muy tarde. Pero aún quiero agregar esta solución para ayudar a los novatos como yo.

 ScrollView sv = (ScrollView)findViewById(R.id.scrollView); sv.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { sv.clearFocus(); return false; } }); 

sí funciona, simplemente configure un oyente para borrar el enfoque. y es mejor que solicitar requestFocusFromTouch a otra vista ‘x’, lo que conducirá al mismo problema: pasar a la vista ‘x’.