J'ai un problème que je ne peux pas résoudre: dans un ScrollView, je n'ai qu'un LinearLayout. Par une action de l'utilisateur, j'ajoute par programme 2 TextView Sur ce LinearLayout, mais par défaut, le défilement reste en haut . Depuis que je contrôle l'action de l'utilisateur, je devrais être facile de faire défiler jusqu'au en bas avec quelque chose comme:
ScrollView scroll = (ScrollView) this.findViewById(R.id.scroll);
scroll.scrollTo(0, scroll.getBottom());
Mais en fait non. Car immédiatement après l’ajout de ces deux nouveaux éléments , GetBottom () renvoie toujours les deux précédents. J'ai essayé de Rafraîchir l'état en appelant refreshDrawableState()
, mais je ne travaille pas.
Avez-vous une idée de comment obtenir le bas d'une ScrollView .__ après avoir ajouté des éléments?
Cela ne répond pas vraiment à votre question… .. Mais c'est une alternative qui fait à peu près la même chose.
Au lieu de faire défiler l'écran vers le bas, modifiez le focus pour une vue située au bas de l'écran.
C'est, remplacer:
scroll.scrollTo(0, scroll.getBottom());
avec:
Footer.requestFocus();
Assurez-vous de spécifier que la vue, par exemple «Pied de page», peut être mise au point.
Android:focusable="true"
Android:focusableInTouchMode="true"
Vous devez faire le défilement sur un fil séparé, sinon cela ne fonctionnera pas. Essaye ça:
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
C'est ce qui a fonctionné pour moi.
ce sera ok
scrollView.post(new Runnable() {
@Override
public void run() {
scroll.scrollTo(0, scroll.getBottom());
}
});
Avez-vous essayé scroll.fullScroll(View.FOCUS_DOWN)
?
vous pouvez appliquer cela aussi
mScrollviewHomepage.setScrollY(View.FOCUS_DOWN);