¿Hay alguna manera de desplazarse ScrollView
programáticamente a una determinada posición?
He creado una dinámica TableLayout
que se coloca en a ScrollView
. Entonces, quiero que en una acción específica (como hacer clic en un botón, etc.) la fila en particular se desplace automáticamente a una posición superior.
¿Es posible?
java
android
scrollview
android-scrollview
Arun Badole
fuente
fuente
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });
La respuesta de Pragna no siempre funciona, intente esto:
o
si quieres desplazarte para comenzar
fuente
mScrollView.fullScroll(mScrollView.FOCUS_DOWN);
con éxito.mScrollView.smoothScrollTo(0, mScrollView.getBottom());
.post
aquí?Quería que scrollView se desplazara directamente después de onCreateView () (no después de, por ejemplo, hacer clic en un botón). Para que funcione, necesitaba usar un ViewTreeObserver:
Pero tenga en cuenta que esto se llamará cada vez que se diseñe algo (por ejemplo, si configura una vista invisible o similar), así que no olvide eliminar este oyente si ya no lo necesita con:
public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
en SDK Niv. <16o
public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
en SDK Lvl> = 16fuente
Aquí hay muchas buenas respuestas, pero solo quiero agregar una cosa. A veces sucede que desea desplazar su ScrollView a una vista específica del diseño, en lugar de un desplazamiento completo hacia la parte superior o inferior.
Un ejemplo simple: en un formulario de registro, si el usuario toca el botón "Registrarse" cuando no se completa un texto de edición del formulario, desea desplazarse a ese texto de edición específico para indicarle al usuario que debe completar ese campo.
En ese caso, puedes hacer algo así:
o, si desea un desplazamiento suave en lugar de un desplazamiento instantáneo:
Obviamente, puede usar cualquier tipo de vista en lugar de Editar texto. Tenga en cuenta que getBottom () devuelve las coordenadas de la vista en función de su diseño principal, por lo que todas las vistas utilizadas dentro de ScrollView deben tener solo un elemento primario (por ejemplo, un diseño lineal).
Si tiene varios padres dentro del hijo de ScrollView, la única solución que he encontrado es llamar a requestChildFocus en la vista padre:
pero en este caso no puede tener un desplazamiento suave.
Espero que esta respuesta pueda ayudar a alguien con el mismo problema.
fuente
Usa algo como esto:
o
fuente
Intenta usar el
scrollTo
método Más informaciónfuente
Si desea desplazarse al instante, puede usar:
O si desea desplazarse suavemente y lentamente para poder usar esto:
fuente
catch
bloque?** para desplazarse hasta la altura deseada. Se me ocurrió una buena solución **
fuente
Obtuve esto para trabajar para desplazarme hasta la parte inferior de un ScrollView (con un TextView dentro)
(Puse esto en un método que actualiza TextView)
fuente
Sí tu puedes.
Digamos que tienes uno
Layout
y dentro de eso, tienes muchosViews
. Entonces, si desea desplazarse a cualquiera medianteView
programación, debe escribir el siguiente fragmento de código:Por ejemplo:
content_main.xml
MainActivity.java
Si desea desplazarse a un específico
View
, digamos txtview , en este caso, simplemente escriba:Y ya terminaste.
fuente
Nota: si ya está en un hilo, debe hacer un nuevo hilo de publicación, o no se desplazará a una nueva altura larga hasta el final (para mí). Por ej .:
fuente
Agregar otra respuesta que no implique coordenadas.
Esto traerá su vista deseada para enfocar (pero no a la posición superior):
child : el hijo de este ViewParent que quiere enfocarse. Esta vista contendrá la vista enfocada. No es necesariamente la vista la que realmente tiene foco.
Enfocado : la vista que es descendiente de un niño que realmente tiene foco
fuente
solo desplazamiento de página:
fuente
Todos están publicando respuestas tan complicadas.
Encontré una respuesta fácil, para desplazarme hacia abajo, muy bien:
Y, si es necesario, puede poner la segunda línea de código, arriba, en un ejecutable:
Me llevó mucha investigación y jugar para encontrar esta solución simple. ¡Espero que te ayude a ti también! :)
fuente
Estaba usando Runnable con sv.fullScroll (View.FOCUS_DOWN); Funciona perfectamente para el problema inmediato, pero ese método hace que ScrollView tome el foco de toda la pantalla, si hace que AutoScroll suceda siempre, ningún EditText podrá recibir información del usuario, mi solución fue usar un código diferente bajo el runnable:
sv.scrollTo (0, sv.getBottom () + sv.getScrollY ());
haciendo lo mismo sin perder el foco en vistas importantes
saludos.
fuente
me esta funcionando
fuente
fuente
fuente