Est-il un moyen de faire défiler un défilement de vue spécifique de modifier le texte?
J'ai une très longue activité avec un scrollview. C'est un formulaire avec différents champs que l'utilisateur doit remplir. J'ai une case à cocher à mi-chemin de ma forme, et lorsque l'utilisateur coche, je tiens à faire défiler jusqu'à une partie spécifique de la vue. Est-il possible de faire défiler jusqu'à un EditText objet (ou tout autre objet de vue) par programmation?
Aussi, je sais que c'est possible à l'aide de X et Y coordonnées mais je veux éviter de faire ce que le formulaire peut-être changé d'utilisateur à utilisateur.
the form may changed from user to user
mais vous pouvez simplement utilisermEditView.getTop();
- si quelqu'un est à l'aide de NestedScrollView dans CoordinatorLayout, vous pouvez faire défiler jusqu'à un point de vue spécifique à l'aide de stackoverflow.com/questions/52083678/...
Vous devez vous connecter pour publier un commentaire.
new Handler().post
???your_scrollview.post(...
La réponse de Sherif elKhatib peut être grandement améliorée, si vous voulez faire défiler l'affichage vers le centre de la spirale vue. Cette réutilisables méthode lisse fait défiler l'affichage vers le centre visible de HorizontalScrollView.
Pour une verticale
ScrollView
changer lex
ety
position des entrées desmoothScroll
. Et l'utilisationview.getTop()
au lieu deview.getLeft()
etview.getBottom()
au lieu dev.getRight()
.🙂
Cela fonctionne bien pour moi :
enfant - L'enfant de cette ViewParent qui veut se concentrer. Cette vue contient la vue. Il n'est pas nécessairement le point de vue qui a réellement de se concentrer.
porté - Le point de vue qui est un descendant de l'enfant qui a réellement de se concentrer
À mon avis le meilleur moyen pour faire défiler jusqu'à un rectangle donné est via
Afficher.requestRectangleOnScreen(Rect, Boolean)
. Vous devez l'appeler sur unView
vous souhaitez faire défiler et passer un local rectangle vous souhaitez être visible sur l'écran. Le deuxième paramètre doit êtrefalse
pour un défilement fluide ettrue
immédiate de défilement.scrollview.smoothScrollTo
ne fonctionnera pas si la vue est hors de l'écran, (essayé dans émulateur android sdk version 26)J'ai fait un petit utilitaire méthode basée sur la Réponse de WarrenFaith, ce code prend également en compte si ce point de vue est déjà visible dans la scrollview, pas besoin de faire défiler la liste.
scrollBounds
devrait être le paramètre de lascrollView.getHitRect
méthode.Vous devriez faire de votre
TextView
attention:Mon EditText a été imbriquée plusieurs couches à l'intérieur de mon ScrollView, qui lui-même n'est pas la mise en page de la vue racine. Parce que getTop() et getBottom() ont été apparente à fournir les coordonnées à l'intérieur de son contenant vue, je l'ai eu calculer la distance entre le haut de la ScrollView vers le haut de la EditText en parcourant les parents de l'EditText.
Un autre varition serait:
ou vous pouvez utiliser le
post()
méthode.référence : https://stackoverflow.com/a/6438240/2624806
Suivant a travaillé beaucoup mieux.
Les réponses ci-dessus fonctionnera bien si la ScrollView est le parent direct de la ChildView. Si votre ChildView est enveloppé dans une autre ViewGroup dans la ScrollView, il va provoquer un comportement inattendu, parce que la Vue.getTop() retourne la position par rapport à son parent. Dans de tels cas, vous avez besoin pour mettre en œuvre cette:
Je pense que j'ai trouvé plus élégant et moins sujette aux erreurs solution à l'aide de
Il n'y a pas de calcul, et contrairement à d'autres solutions proposées, il va traiter correctement le défilement vers le haut et vers le bas.
C'est une bonne idée pour l'envelopper dans
postDelayed
pour la rendre plus fiable, dans le cas où leScrollView
est en cours de modification au momentL'examen de code source Android, vous pouvez trouver qu'il y a déjà une fonction membre de
ScrollView
–scrollToChild(View)
– qui fait exactement ce qui est demandé. Malheureusement, cette fonction est pour une raison obscure marquéprivate
. Basé sur cette fonction que j'ai écrit à la suite de la fonction qui trouve le premierScrollView
au-dessus de laView
spécifié en paramètre et des parchemins de sorte qu'il devient visible à l'intérieur de laScrollView
:Dans mon cas, ce n'est pas
EditText
, c'estgoogleMap
.Et il fonctionne avec succès comme ça.
Que:Est-il un moyen de faire défiler un défilement de la vue à un edittext?
Ans:Imbriquée de défilement de la vue dans recyclerview dernière position ajouté enregistrement de données.
Est-il un moyen de faire défiler un défilement de vue spécifique de modifier le texte?
Ma solution est la suivante:
La suivante est ce que je suis en utilisant:
Cela permet de les faire défiler montant nécessaire pour afficher le bas de la vue, y compris la marge sur le bas de ce point de vue.
De défilement verticale, bon pour les formulaires. La réponse est basée sur Ahmadalibaloch de défilement horizontale.
Si scrlMain est votre NestedScrollView, puis utilisez la commande suivante,
Vous pouvez utiliser
ObjectAnimator
comme ceci: