Gibt es eine Möglichkeit, ein ScrollView
Programm programmgesteuert zu einer bestimmten Position zu scrollen ?
Ich habe eine Dynamik geschaffen, TableLayout
die in einem platziert ist ScrollView
. Ich möchte also, dass bei einer bestimmten Aktion (wie dem Klicken auf eine Schaltfläche usw.) die bestimmte Zeile automatisch zu einer oberen Position gescrollt wird.
Ist es möglich?
java
android
scrollview
android-scrollview
Arun Badole
quelle
quelle
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });
Die Antwort aus Pragna funktioniert nicht immer, versuchen Sie Folgendes:
oder
Wenn Sie zum Starten scrollen möchten
quelle
mScrollView.fullScroll(mScrollView.FOCUS_DOWN);
mit Erfolg verwendet.mScrollView.smoothScrollTo(0, mScrollView.getBottom());
.post
hier?Ich wollte, dass die scrollView direkt nach onCreateView () scrollt (nicht nach z. B. einem Klick auf eine Schaltfläche). Damit es funktioniert, musste ich einen ViewTreeObserver verwenden:
Beachten Sie jedoch, dass dies jedes Mal aufgerufen wird, wenn etwas geplant wird (z. B. wenn Sie eine unsichtbare oder ähnliche Ansicht festlegen). Vergessen Sie also nicht, diesen Listener zu entfernen, wenn Sie ihn nicht mehr benötigen mit:
public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
auf SDK Lvl <16oder
public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
im SDK Lvl> = 16quelle
Hier gibt es viele gute Antworten, aber ich möchte nur eines hinzufügen. Es kommt manchmal vor, dass Sie Ihre ScrollView zu einer bestimmten Ansicht des Layouts scrollen möchten, anstatt vollständig nach oben oder unten zu scrollen.
Ein einfaches Beispiel: Wenn der Benutzer in einem Registrierungsformular auf die Schaltfläche "Anmelden" tippt, wenn ein Bearbeitungstext des Formulars nicht ausgefüllt ist, möchten Sie zu diesem bestimmten Bearbeitungstext scrollen, um dem Benutzer mitzuteilen, dass er dieses Feld ausfüllen muss.
In diesem Fall können Sie so etwas tun:
oder, wenn Sie eine glatte Schriftrolle anstelle einer sofortigen Schriftrolle wünschen:
Natürlich können Sie jede Art von Ansicht anstelle von Text bearbeiten verwenden. Beachten Sie, dass getBottom () die Koordinaten der Ansicht basierend auf dem übergeordneten Layout zurückgibt, sodass alle in der ScrollView verwendeten Ansichten nur ein übergeordnetes Layout haben sollten (z. B. ein lineares Layout).
Wenn das untergeordnete Element der ScrollView mehrere übergeordnete Elemente enthält, besteht die einzige gefundene Lösung darin, requestChildFocus in der übergeordneten Ansicht aufzurufen:
In diesem Fall können Sie jedoch keine glatte Schriftrolle haben.
Ich hoffe, diese Antwort kann jemandem mit dem gleichen Problem helfen.
quelle
Verwenden Sie so etwas:
oder
quelle
Versuchen Sie es mit der
scrollTo
Methode More Infoquelle
Wenn Sie sofort scrollen möchten, können Sie Folgendes verwenden:
Oder wenn Sie reibungslos und langsam scrollen möchten, damit Sie Folgendes verwenden können:
quelle
catch
Block?** um zur gewünschten Höhe zu scrollen. Ich habe eine gute Lösung gefunden **
quelle
Ich habe dies zum Laufen gebracht, um zum Ende einer ScrollView zu scrollen (mit einer TextView darin):
(Ich habe dies auf eine Methode gesetzt, die die Textansicht aktualisiert.)
quelle
Ja, du kannst.
Nehmen wir an, Sie haben einen
Layout
und darin haben Sie vieleViews
. Wenn Sie alsoView
programmgesteuert zu einem beliebigen Bildlauf scrollen möchten , müssen Sie den folgenden Codeausschnitt schreiben:Beispielsweise:
content_main.xml
MainActivity.java
Wenn Sie zu einem bestimmten Bildlauf scrollen möchten,
View
sagen wir txtview . In diesem Fall schreiben Sie einfach:Und du bist fertig.
quelle
Hinweis: Wenn Sie bereits in einem Thread sind, müssen Sie einen neuen Post-Thread erstellen, oder es wird keine neue lange Höhe bis zum vollständigen Ende (für mich) gescrollt. Zum Beispiel:
quelle
Hinzufügen einer weiteren Antwort ohne Koordinaten.
Dadurch wird Ihre gewünschte Ansicht fokussiert (jedoch nicht an die oberste Position):
Kind - Das Kind dieses ViewParent, das den Fokus haben möchte. Diese Ansicht enthält die fokussierte Ansicht. Es ist nicht unbedingt die Ansicht, die tatsächlich den Fokus hat.
fokussiert - Die Ansicht, die ein Nachkomme eines Kindes ist, das tatsächlich fokussiert ist
quelle
nur Seite scrollen:
quelle
Jeder veröffentlicht so komplizierte Antworten.
Ich fand eine einfache Antwort, um ganz nach unten zu scrollen:
Bei Bedarf können Sie die zweite Codezeile oben in eine ausführbare Datei einfügen:
Ich habe viel recherchiert und herumgespielt, um diese einfache Lösung zu finden. Ich hoffe es hilft dir auch! :) :)
quelle
Ich habe Runnable mit sv.fullScroll (View.FOCUS_DOWN) verwendet. Es funktioniert perfekt für das unmittelbare Problem, aber diese Methode veranlasst ScrollView, den Fokus vom gesamten Bildschirm zu übernehmen. Wenn Sie dafür sorgen, dass AutoScroll jedes Mal ausgeführt wird, kann kein EditText Informationen vom Benutzer empfangen. Meine Lösung verwendete einen anderen Code unter dem Runnable:
sv.scrollTo (0, sv.getBottom () + sv.getScrollY ());
das Gleiche tun, ohne den Fokus auf wichtige Ansichten zu verlieren
Schöne Grüße.
quelle
es funktioniert für mich
quelle
quelle
quelle