Existe-t-il un moyen de faire défiler un ScrollView
programme vers une certaine position?
J'ai créé une dynamique TableLayout
qui est placée dans un fichier ScrollView
. Donc, je veux que sur une action spécifique (comme cliquer sur un bouton, etc.) la ligne particulière devrait défiler automatiquement vers une position supérieure.
C'est possible?
java
android
scrollview
android-scrollview
Arun Badole
la source
la source
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });
La réponse de Pragna ne fonctionne pas toujours, essayez ceci:
ou
si vous voulez faire défiler pour commencer
la source
mScrollView.fullScroll(mScrollView.FOCUS_DOWN);
avec succès.mScrollView.smoothScrollTo(0, mScrollView.getBottom());
.post
ici?Je voulais que scrollView défile directement après onCreateView () (pas après par exemple un clic sur un bouton). Pour le faire fonctionner, j'avais besoin d'utiliser un ViewTreeObserver:
Mais attention, cela sera appelé à chaque fois que quelque chose sera mis en page (par exemple si vous définissez une vue invisible ou similaire), alors n'oubliez pas de supprimer cet écouteur si vous n'en avez plus besoin avec:
public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
sur SDK Lvl <16ou
public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
dans SDK Lvl> = 16la source
Il y a beaucoup de bonnes réponses ici, mais je veux seulement ajouter une chose. Il arrive parfois que vous souhaitiez faire défiler votre ScrollView vers une vue spécifique de la mise en page, au lieu d'un défilement complet vers le haut ou le bas.
Un exemple simple: dans un formulaire d'inscription, si l'utilisateur appuie sur le bouton "Inscription" alors qu'un texte d'édition du formulaire n'est pas rempli, vous voulez faire défiler jusqu'à ce texte d'édition spécifique pour indiquer à l'utilisateur qu'il doit remplir ce champ.
Dans ce cas, vous pouvez faire quelque chose comme ça:
ou, si vous voulez un défilement fluide au lieu d'un défilement instantané:
Évidemment, vous pouvez utiliser n'importe quel type de vue au lieu de Modifier le texte. Notez que getBottom () renvoie les coordonnées de la vue en fonction de sa disposition parente, de sorte que toutes les vues utilisées à l'intérieur de ScrollView ne doivent avoir qu'un parent (par exemple une disposition linéaire).
Si vous avez plusieurs parents dans l'enfant du ScrollView, la seule solution que j'ai trouvée est d'appeler requestChildFocus sur la vue parent:
mais dans ce cas, vous ne pouvez pas avoir un défilement fluide.
J'espère que cette réponse peut aider quelqu'un avec le même problème.
la source
Utilisez quelque chose comme ceci:
ou
la source
Essayez d'utiliser la
scrollTo
méthode Plus d'informationsla source
Si vous souhaitez faire défiler instantanément, vous pouvez utiliser:
Ou si vous voulez faire défiler doucement et lentement pour pouvoir utiliser ceci:
la source
catch
bloc?** pour faire défiler jusqu'à la hauteur désirée. J'ai trouvé une bonne solution **
la source
J'ai fait fonctionner cela pour faire défiler vers le bas d'un ScrollView (avec un TextView à l'intérieur):
(Je mets cela sur une méthode qui met à jour le TextView)
la source
Oui, vous pouvez.
Disons que vous en avez un
Layout
et que vous en avez plusieursViews
. Donc, si vous souhaitez faire défiler jusqu'à n'importe quel parView
programme, vous devez écrire l'extrait de code suivant:Par exemple:
content_main.xml
MainActivity.java
Si vous voulez faire défiler jusqu'à une vue spécifique
View
, disons txtview , dans ce cas, écrivez simplement:Et vous avez terminé.
la source
Remarque: si vous êtes déjà dans un fil, vous devez créer un nouveau fil de discussion, ou il ne fait pas défiler la nouvelle hauteur longue jusqu'à la fin (pour moi). Par exemple:
la source
Ajout d'une autre réponse qui n'implique pas de coordonnées.
Cela amènera la vue souhaitée à se concentrer (mais pas à la position supérieure):
child - L'enfant de ce ViewParent qui veut le focus. Cette vue contiendra la vue focalisée. Ce n'est pas nécessairement le point de vue qui a réellement le centre d'intérêt.
focus - La vue qui est un descendant de l'enfant qui a réellement le focus
la source
juste le défilement de la page:
la source
Tout le monde publie des réponses si compliquées.
J'ai trouvé une réponse facile, pour faire défiler vers le bas, bien:
Et, si nécessaire, vous pouvez mettre la deuxième ligne de code, ci-dessus, dans un exécutable:
Il m'a fallu beaucoup de recherches et de jeux pour trouver cette solution simple. J'espère que cela vous aide aussi! :)
la source
J'utilisais le Runnable avec sv.fullScroll (View.FOCUS_DOWN); Cela fonctionne parfaitement pour le problème immédiat, mais cette méthode permet à ScrollView de prendre le focus sur tout l'écran, si vous faites en sorte que cet AutoScroll se produise à chaque fois, aucun EditText ne pourra recevoir d'informations de l'utilisateur, ma solution était d'utiliser un code différent sous le runnable:
sv.scrollTo (0, sv.getBottom () + sv.getScrollY ());
faire la même chose sans perdre de vue les points de vue importants
salutations.
la source
ça marche pour moi
la source
la source
la source