Me gustaría que un ScrollView comenzara en la parte inferior. Cualquier metodo?
android
android-scrollview
Noah Seidman
fuente
fuente
Respuestas:
scroll.fullScroll(View.FOCUS_DOWN)
También debería funcionar.Pon esto en un
scroll.Post(Runnable run)
Código Kotlin
fuente
deberías ejecutar el código dentro del scroll.post así:
fuente
scroll.scrollTo(0, scroll.getHeight());
para saltar al fondo, oscroll.smoothScrollTo(0, scroll.getHeight());
para un desplazamiento más suavescrollView.post { scrollView.fullScroll(View.FOCUS_DOWN) }
scroll.fullScroll(View.FOCUS_DOWN)
conducirá al cambio de enfoque. Eso traerá un comportamiento extraño cuando haya más de una vista enfocable, por ejemplo, dos EditText. Hay otra forma de esta pregunta.Esto funciona bien
Extensión Kotlin
fuente
A veces scrollView.post no funciona
PERO si usa scrollView.postDelayed, definitivamente funcionará
fuente
Lo que funcionó mejor para mí es
fuente
Incremento para trabajar perfectamente.
Nota
Esta respuesta es una solución para versiones realmente antiguas de Android. Hoy
postDelayed
no tiene más ese error y debería usarlo.fuente
postDelayed
:)Lo intenté con éxito.
fuente
Cuando la vista aún no está cargada, no puede desplazarse. Puede hacerlo 'más tarde' con una publicación o llamada de suspensión como se indicó anteriormente, pero esto no es muy elegante.
Es mejor planificar el desplazamiento y hacerlo en el siguiente onLayout (). Código de ejemplo aquí:
https://stackoverflow.com/a/10209457/1310343
fuente
Una cosa a considerar es qué NO configurar. Asegúrese de que sus controles secundarios, especialmente los controles EditText, no tengan establecida la propiedad RequestFocus. Esta puede ser una de las últimas propiedades interpretadas en el diseño y anulará la configuración de gravedad en sus padres (el diseño o ScrollView).
fuente
Aquí hay otras formas de desplazarse hacia abajo
Utilizando
Si desplaza la vista ya presentada
Si su vista de desplazamiento no está terminada (por ejemplo: se desplaza hacia abajo en
onCreate
Método de actividad ...)fuente
No es exactamente la respuesta a la pregunta, pero necesitaba desplazarme hacia abajo tan pronto como un EditText tuviera el foco. Sin embargo, la respuesta aceptada haría que el ET también pierda el foco de inmediato (supongo que con ScrollView).
Mi solución fue la siguiente:
fuente
De hecho, encontré que llamar a fullScroll dos veces es el truco:
Puede tener algo que ver con la activación del método post () justo después de realizar el primer desplazamiento (sin éxito). Creo que este comportamiento ocurre después de cualquier llamada a un método anterior en myScrollView, por lo que puede intentar reemplazar el primer método fullScroll () por cualquier otra cosa que pueda ser relevante para usted.
fuente
Usar hay otra forma genial de hacer esto con las corutinas de Kotlin. La ventaja de usar una rutina opuesta a un controlador con un ejecutable (post / postDelayed) es que no activa un hilo costoso para ejecutar una acción retrasada.
Es importante especificar el HandlerContext de la rutina como IU; de lo contrario, es posible que no se invoque la acción retrasada desde el hilo de la IU.
fuente
En esos casos estaban usando solo scroll.scrollTo (0, sc.getBottom ()) no funciona, úselo usando úselo scroll.post
Ejemplo:
fuente
Una posible razón de por qué
scroll.fullScroll(View.FOCUS_DOWN)
podría no funcionar incluso envuelto.post()
es que la vista no se presenta. En este caso, View.doOnLayout () podría ser una mejor opción:O, algo más elaborado para las almas valientes: https://chris.banes.dev/2019/12/03/suspending-views/
fuente