J'aimerais qu'un ScrollView commence tout en bas. Des méthodes?
android
android-scrollview
Noah Seidman
la source
la source
Réponses:
scroll.fullScroll(View.FOCUS_DOWN)
devrait également fonctionner.Mettez cela dans un
scroll.Post(Runnable run)
Code Kotlin
la source
vous devez exécuter le code à l'intérieur du scroll.post comme ceci:
la source
scroll.scrollTo(0, scroll.getHeight());
pour sauter vers le bas ouscroll.smoothScrollTo(0, scroll.getHeight());
pour un défilement plus fluidescrollView.post { scrollView.fullScroll(View.FOCUS_DOWN) }
scroll.fullScroll(View.FOCUS_DOWN)
entraînera un changement d'orientation. Cela apportera un comportement étrange lorsqu'il y a plusieurs vues focalisables, par exemple deux EditText. Il existe une autre façon de répondre à cette question.Cela fonctionne bien.
Extension Kotlin
la source
Parfois, scrollView.post ne fonctionne pas
MAIS si vous utilisez scrollView.postDelayed, cela fonctionnera certainement
la source
Ce qui a le mieux fonctionné pour moi, c'est
la source
J'incrémente pour travailler parfaitement.
Remarque
Cette réponse est une solution de contournement pour les versions très anciennes d'Android. Aujourd'hui,
postDelayed
il n'y a plus de bug et vous devriez l'utiliser.la source
postDelayed
:)j'ai essayé avec succès.
la source
Lorsque la vue n'est pas encore chargée, vous ne pouvez pas faire défiler. Vous pouvez le faire «plus tard» avec un post ou un appel de sommeil comme ci-dessus, mais ce n'est pas très élégant.
Il est préférable de planifier le défilement et de le faire lors du prochain onLayout (). Exemple de code ici:
https://stackoverflow.com/a/10209457/1310343
la source
Une chose à considérer est ce qu'il ne faut PAS définir. Assurez-vous que vos contrôles enfants, en particulier les contrôles EditText, n'ont pas la propriété RequestFocus définie. Il peut s'agir de l'une des dernières propriétés interprétées de la disposition et elle remplacera les paramètres de gravité de ses parents (la disposition ou ScrollView).
la source
Voici quelques autres façons de défiler vers le bas
En utilisant
Si vous faites défiler la vue déjà présentée
Si votre vue de défilement n'est pas terminée (par exemple: vous faites défiler vers le bas dans la
onCreate
méthode d' activité ...)la source
Pas exactement la réponse à la question, mais je devais faire défiler vers le bas dès qu'un EditText avait le focus. Cependant, la réponse acceptée ferait perdre également la focalisation à l'ET (pour ScrollView, je suppose).
Ma solution de contournement était la suivante:
la source
En fait, j'ai trouvé qu'appeler fullScroll deux fois fait l'affaire:
Cela peut avoir quelque chose à voir avec l'activation de la méthode post () juste après avoir effectué le premier défilement (infructueux). Je pense que ce problème se produit après tout appel de méthode précédent sur myScrollView, vous pouvez donc essayer de remplacer la première méthode fullScroll () par toute autre chose qui pourrait vous concerner.
la source
Il existe une autre façon intéressante de le faire avec les coroutines Kotlin. L'avantage d'utiliser une coroutine opposée à un gestionnaire avec un exécutable (post / postDelayed) est qu'il ne lance pas un thread coûteux pour exécuter une action différée.
Il est important de spécifier le HandlerContext de la coroutine comme interface utilisateur, sinon l'action différée risque de ne pas être appelée à partir du thread d'interface utilisateur.
la source
Dans ces cas, l'utilisation de scroll.scrollTo (0, sc.getBottom ()) ne fonctionnait pas, utilisez-la en utilisant scroll.post
Exemple:
la source
Une des raisons possibles pour lesquelles cela
scroll.fullScroll(View.FOCUS_DOWN)
pourrait ne pas fonctionner même enveloppé.post()
est que la vue n'est pas disposée. Dans ce cas, View.doOnLayout () pourrait être une meilleure option:Ou, quelque chose de plus élaboré pour les âmes courageuses: https://chris.banes.dev/2019/12/03/suspending-views/
la source