Ich möchte, dass eine ScrollView ganz unten beginnt. Irgendwelche Methoden?
android
android-scrollview
Noah Seidman
quelle
quelle
Antworten:
scroll.fullScroll(View.FOCUS_DOWN)
sollte auch funktionieren.Setzen Sie dies in ein
scroll.Post(Runnable run)
Kotlin Code
quelle
Sie sollten den Code in der scroll.post wie folgt ausführen:
quelle
scroll.scrollTo(0, scroll.getHeight());
um nach unten zu springen, oderscroll.smoothScrollTo(0, scroll.getHeight());
für eine glattere SchriftrollescrollView.post { scrollView.fullScroll(View.FOCUS_DOWN) }
scroll.fullScroll(View.FOCUS_DOWN)
wird zu einer Änderung des Fokus führen. Dies führt zu einem merkwürdigen Verhalten, wenn mehr als eine fokussierbare Ansicht vorhanden ist, z. B. zwei EditText. Es gibt einen anderen Weg für diese Frage.Das funktioniert gut.
Kotlin-Erweiterung
quelle
Manchmal funktioniert scrollView.post nicht
ABER wenn Sie scrollView.postDelayed verwenden, wird es definitiv funktionieren
quelle
Was für mich am besten funktioniert hat, ist
quelle
Ich erhöhe, um perfekt zu arbeiten.
Hinweis
Diese Antwort ist eine Problemumgehung für wirklich alte Versionen von Android. Heute
postDelayed
hat der nicht mehr diesen Bug und du solltest ihn benutzen.quelle
postDelayed
:)Ich habe das erfolgreich versucht.
quelle
Wenn die Ansicht noch nicht geladen ist, können Sie nicht scrollen. Sie können es "später" mit einem Post- oder Schlafanruf wie oben tun, aber dies ist nicht sehr elegant.
Es ist besser, die Schriftrolle zu planen und beim nächsten onLayout () auszuführen. Beispielcode hier:
https://stackoverflow.com/a/10209457/1310343
quelle
Eine zu berücksichtigende Sache ist, was NICHT eingestellt werden soll. Stellen Sie sicher, dass für Ihre untergeordneten Steuerelemente, insbesondere für EditText-Steuerelemente, die RequestFocus-Eigenschaft nicht festgelegt ist. Dies ist möglicherweise eine der zuletzt interpretierten Eigenschaften des Layouts und überschreibt die Schwerkrafteinstellungen der übergeordneten Elemente (Layout oder ScrollView).
quelle
Hier sind einige andere Möglichkeiten, um nach unten zu scrollen
Verwenden von
Wenn Sie die Bildlaufansicht bereits angelegt haben
Wenn Ihre Bildlaufansicht nicht fertig angelegt ist (z. B.: Sie scrollen in der Aktivitätsmethode nach unten
onCreate
...)quelle
Nicht genau die Antwort auf die Frage, aber ich musste nach unten scrollen, sobald ein EditText den Fokus bekam. Die akzeptierte Antwort würde jedoch dazu führen, dass der ET auch sofort den Fokus verliert (auf die ScrollView, nehme ich an).
Meine Problemumgehung war folgende:
quelle
Ich habe tatsächlich festgestellt, dass das zweimalige Aufrufen von fullScroll den Trick macht:
Dies hat möglicherweise etwas mit der Aktivierung der post () -Methode direkt nach dem ersten (nicht erfolgreichen) Bildlauf zu tun. Ich denke, dieses Verhalten tritt nach jedem vorherigen Methodenaufruf in myScrollView auf, sodass Sie versuchen können, die erste fullScroll () -Methode durch etwas anderes zu ersetzen, das für Sie relevant sein könnte.
quelle
Es gibt eine andere coole Möglichkeit, dies mit Kotlin-Coroutinen zu tun. Der Vorteil der Verwendung einer Coroutine im Gegensatz zu einem Handler mit einer ausführbaren Datei (post / postDelayed) besteht darin, dass kein teurer Thread zum Ausführen einer verzögerten Aktion gestartet wird.
Es ist wichtig, den HandlerContext der Coroutine als Benutzeroberfläche anzugeben, da sonst die verzögerte Aktion möglicherweise nicht vom UI-Thread aufgerufen wird.
quelle
In diesen Fällen würde nur scroll.scrollTo (0, sc.getBottom ()) nicht funktionieren, verwenden Sie es mit scroll.post
Beispiel:
quelle
Ein möglicher Grund, warum
scroll.fullScroll(View.FOCUS_DOWN)
möglicherweise nicht einmal eingepackt funktioniert,.post()
ist, dass die Ansicht nicht angelegt ist. In diesem Fall könnte View.doOnLayout () eine bessere Option sein:Oder etwas Ausführlicheres für die tapferen Seelen: https://chris.banes.dev/2019/12/03/suspending-views/
quelle