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:
scrollView.post(new Runnable() {
public void run() {
scrollView.scrollTo(0, editText.getBottom());
}
});
oder, wenn Sie eine glatte Schriftrolle anstelle einer sofortigen Schriftrolle wünschen:
scrollView.post(new Runnable() {
public void run() {
scrollView.smoothScrollTo(0, editText.getBottom());
}
});
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:
editText.getParent().requestChildFocus(editText, editText);
In diesem Fall können Sie jedoch keine glatte Schriftrolle haben.
Ich hoffe, diese Antwort kann jemandem mit dem gleichen Problem helfen.
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });