Faire TextView défilant sur Android
Je suis l'affichage du texte dans un textview qui semble être trop long
en un seul écran. J'ai besoin de faire mes TextView de défilement. Comment puis-je faire
qui?
Voici le code:
final TextView tv = new TextView(this);
tv.setBackgroundResource(R.drawable.splash);
tv.setTypeface(face);
tv.setTextSize(18);
tv.setTextColor(R.color.BROWN);
tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent e) {
Random r = new Random();
int i = r.nextInt(101);
if (e.getAction() == e.ACTION_DOWN) {
tv.setText(tips[i]);
tv.setBackgroundResource(R.drawable.inner);
}
return true;
}
});
setContentView(tv);
OriginalL'auteur Muhammad Maqsoodur Rehman | 2009-11-17
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin d'utiliser un
ScrollView
en fait.Il suffit de régler le
propriétés de votre
TextView
de la mise en page du fichier xml.Alors utiliser:
yourTextView.setMovementMethod(new ScrollingMovementMethod());
dans votre code.
Bingo, ça défile!
maxLines
vous demande d'entrer un nombre arbitraire; ce n'est pas quelque chose qui va travailler pour chaque taille de l'écran et la taille de la police? Je trouve ça plus simple pour l'envelopper avec unScrollView
, ce qui signifie que je n'avez pas à ajouter toutes autres attributs XML ou code (comme le réglage de la méthode de mouvement).Le ScrollView nécessite android:layout_height " aussi.
Eh bien oui. Soit vous laissez le
ScrollView
prendre tout l'espace dont elle a besoin (par exemple via l'android:fillViewport
attribut), ou définir la taille que vous voulez. À l'aide demaxLines
ne doit pas être utilisé pour définir les tailles des éléments de l'INTERFACE utilisateur, de sorte que n'est pas une solution.vous n'avez pas besoin de définir maxlines. juste le repos.
Afin de clarifier ce que tout le monde a dit à propos de "lisse" scrolling: Si vous utilisez cette méthode, le défilement est fait "en douceur" (que vous pouvez vous déplacer pixel par pixel), mais il est pas cinétique. Dès que vous retirez votre doigt, il s'arrête de défiler instantanément, il n'y a pas de feuilleter. C'est assez inacceptable pour une interface modern UI je vais donc modifier la réponse à assurez-vous que d'autres personnes ne pas perdre du temps sur cette "solution".
OriginalL'auteur Amit Chintawar
C'est la façon dont je l'ai fait purement XML:
NOTES:
android:fillViewport="true"
combiné avecandroid:layout_weight="1.0"
fera le textview prendre tout l'espace disponible.Lors de la définition de la Scrollview, NE spécifiez PAS
android:layout_height="fill_parent"
sinon le scrollview ne fonctionne pas! (ce qui m'a fait perdre une heure tout à l'heure! FFS).CONSEIL DU PRO:
Par programmation faites défiler vers le bas après l'ajout de texte, utilisez ceci:
mTextView.getBottom()
, il suffit d'utiliser la méthodemScrollView.fullScroll(View.FOCUS_DOWN)
car c'est une partie de la ScrollView API. Voir ici et ici pour plus d'info.Beaucoup mieux les performances de défilement de la accepté de répondre.
Fonctionne magnifiquement 🙂
Android avertit que soit la
LinearLayout
ou laScrollView
peut être inutile dans cet exemple (j'ai enlevé leLinearLayout
complètement). Il avertit également que pour laTextView
, il devrait êtreandroid:layout_height="wrap_content"
pour correspondre à laScrollView
. Ces avertissements peuvent être dues à l'3 ans se sont écoulés depuis cette réponse a été publiée. Peu importe, cette réponse prend en charge le défilement doux et feuilleter...+1L'ajout de
<!--suppress AndroidLintUselessParent -->
au-dessus de laScrollView
dans le fichier xml de prendre soin de ces avertissements.OriginalL'auteur Someone Somewhere
Tout ce qui est vraiment nécessaire est la setMovementMethod(). Voici un exemple d'utilisation d'un LinearLayout.
Fichier main.xml
Fichier WordExtractTest.java
Il fonctionne, mais Est-der quelque sorte l'actualiser après le défilement? je veux dire, après le défilement de la TextView je vais changer le texte sur elle, mais sa position reste défile, même si il n'est pas nécessaire. son bcose auparavant, j'avais appliqué de défilement...
pas de barres de défilement, défilement est maladroit par rapport à la
ScrollView
méthode.Utiliser un
StringBuilder
au lieu d'unString
... ce que vous avez est un peu du gaspillage.cela fonctionne, mais le défilement n'est pas lisse. Fonctionne encore bien merci.
OriginalL'auteur EddieB
Faire de votre textview juste en ajoutant cette
comment obtenir la cinétique de défilement?
href="http://stackoverflow.com/a/13972249/895245">stackoverflow.com/a/13972249/895245
Vous ne voulez pas "défilement cinétique" pour un texte qui doit être lu.
OriginalL'auteur matasoy
Il n'est pas nécessaire de mettre en
Vous pouvez faire votre travail en ajoutant simplement:
Et de mettre ce code dans votre classe Java:
quand je suis en utilisant le ScrollView en tant que parent, que le temps sa ne fonctionne pas
OriginalL'auteur Ahsan Raza
Vous pouvez soit
TextView
par unScrollView
; ouScrollingMovementMethod.getInstance();
.OriginalL'auteur Samuh
La meilleure façon que j'ai trouvée:
Remplacer le TextView avec un EditText avec ces attributs supplémentaires:
Il n'est pas nécessaire pour l'emballage dans un ScrollView.
De loin la meilleure et la plus appropriée de répondre, d'autant que les EditText est un TextView sous-classe et la question est de savoir comment faire le textview de défilement, pas comment contourner le problème. Allait voter deux fois si je le pouvais 🙂
Ne pouvais pas être plus en désaccord. 🙂 C'est purement fortuite que cela fonctionne, et il n'y a aucune garantie qu'il sera dans les futures versions d'Android. Si vous voulez défilement, utilisez le défilement des outils qui Android fournit.
ScrollView
est la bonne façon de procéder.Il n'y a rien "fortuite", EditText EST un TextView avec quelques ajout des méthodes et des remplacements qui est spécialement adapté pour accueillir longueur variable texte. En particulier EditText remplace la valeur de retour de la TextView getDefaultMovementMethod fonction. L'implémentation par défaut renvoie la valeur NULL, EditText se fait de la même chose de tous ces autres réponses sont ce qui suggère. Aussi loin que l'aide des outils qu'Android offre, l'EditText classe est beaucoup moins susceptibles de devenir obsolètes que toutes les autres méthodes présentes dans ces réponses.
Mon problème avec cela est si vous êtes en fonction sur le comportement par défaut de EditText, que est ce que je voulais dire peut très bien modifier en bas de la route (pas du tout que EditText serait obsolète). On peut faire valoir que, mais encore une fois, l'idée est d'utiliser des composants et des fonctionnalités qui sont appropriés pour la tâche à portée de main. Le ScrollView a été explicitement conçue pour englober le défilement. J'essaie toujours de faire, et de toujours proposer d'autres d'utiliser le bon outil pour le travail. Il y a presque toujours plusieurs approches pour tout problème de programmation. De toute façon, merci pour la réponse réfléchie.
OriginalL'auteur Valentin Galea
C'est "Comment appliquer de la barre de Défilement à votre TextView", à l'aide de XML.
Tout d'abord, vous avez besoin de prendre un Textview de contrôle dans le main.xml fichier et écrire un texte ... comme ceci:
Ensuite, placez le texte de l'affichage de contrôle entre la scrollview pour afficher la barre de défilement pour ce texte:
Que c'est...
M'a aidé à résoudre mon problème!
OriginalL'auteur mOmO
Simple. Voilà comment j'ai fait:
XML Côté:
Java côté:
Bonus:
De laisser le texte en vue de faire défiler le texte à remplir, vous devez ajouter:
pour le TextView fichier xml. Faire défiler vers le bas automatiquement plus de texte.
Bien sûr, vous devez ajouter le texte à l'aide de l'ajout de la fonction au lieu de texte:
Je l'ai utilisé pour le Journal but.
J'espère que cette aide 😉
OriginalL'auteur MBH
Les "pro-tip" au-dessus de Quelqu'un, quelque part (Faire TextView défilant sur Android) fonctionne très bien, cependant, que faire si vous êtes dynamiquement ajouter du texte à la ScrollView et voudrais automatiquement défiler vers le bas après un ajout seulement lorsque l'utilisateur est en bas de la ScrollView? (Peut-être parce que si l'utilisateur a défiler jusqu'à lire quelque chose que vous ne voulez pas réinitialiser automatiquement vers le bas lors d'un ajout, ce qui serait ennuyeux.)
De toute façon, ici, il est:
La mTextStatus.getLineHeight() fera en sorte que vous n'avez pas scrollToBottom() si l'utilisateur est à l'intérieur d'une ligne à partir de la fin de la ScrollView.
OriginalL'auteur Mark Cramer
Cela fournira lisse défilement du texte avec une barre de défilement.
OriginalL'auteur IT-Dan
Si vous souhaitez un texte défile dans le textview, alors vous pouvez suivre les étapes suivantes:
D'abord, vous devez avoir à la sous-classe textview.
Et ensuite l'utiliser.
Qui suit est un exemple d'un sous-classé textview.
Maintenant, vous devez utiliser que dans le XML de cette façon:
.
OriginalL'auteur Dipendra
Je n'ai pas trouvé TextView de défilement à l'appui du "fling' geste, où il continue de défilement après un glisser vers le haut ou vers le bas. J'ai fini par mettre en place moi-même parce que je ne voulais pas utiliser un ScrollView, pour diverses raisons, et il ne semble pas être un MovementMethod que les deux m'a permis de sélectionner le texte et cliquer sur les liens.
OriginalL'auteur android.weasel
Ajoutez la ligne suivante dans le textview en XML.
Et enfin, ajouter
dans le fichier Java.
Ce n'est pas défilement cinétique. Ne l'utilisez pas.
OriginalL'auteur user3921740
Lorsque vous avez terminé avec défilement, ajoutez cette ligne à la vue de la dernière ligne lorsque vous saisissez quelque chose dans la vue:
OriginalL'auteur Rahul Baradia
Ajouter à votre mise en page XML:
Et dans le code que vous avez à écrire les lignes suivantes:
je ne veux pas ellipsize la fin du texte. comment dois-je faire.
utiliser android:ellipsize="none"
OriginalL'auteur Ritesh
Si vous ne souhaitez pas utiliser l'EditText solution, alors vous pourriez avoir plus de chance avec:
OriginalL'auteur Justin Buser
Le code ci-dessous crée automatiquement un défilement horizontal textview:
Tout en ajoutant TextView pour l'utilisation de xml
Définissez les propriétés suivantes de TextView dans onCreate()
OriginalL'auteur whitepearl
L'utiliser comme ceci
OriginalL'auteur Kamil Ibadov
Dans mon cas.Contrainte De Mise En Page.COMME 2.3.
Mise en œuvre du Code:
XML:
OriginalL'auteur Sasha 888
J'ai du mal avec ce pendant une semaine, et enfin trouvé comment faire ce travail!
Mon problème était que tout allait défiler comme un "bloc". Le texte lui-même était le défilement, mais comme un morceau plutôt que ligne par ligne. De toute évidence, cela ne fonctionne pas pour moi, car il serait de couper les lignes en bas. Toutes les solutions précédentes n'ont pas fonctionné pour moi, j'ai donc conçu mon propre.
Ici est la solution la plus simple et de loin:
Faire un fichier de classe appelé: 'PerfectScrollableTextView' à l'intérieur d'un package, puis copiez et collez ce code dans:
Enfin changer votre 'TextView' XML:
À partir de:
<TextView
:
<com.your_app_goes_here.PerfectScrollableTextView
OriginalL'auteur Petro
Mettre
maxLines
etscrollbars
à l'intérieur de TextView en xml.Puis dans du code java.
textView.setMovementMethod(new ScrollingMovementMethod());
OriginalL'auteur Khemraj
J'ai eu ce problème lorsque j'ai été en utilisant
TextView
à l'intérieur de laScrollView
. Cette solution a fonctionné pour moi.OriginalL'auteur Rohit Mandiwal
chaque fois que vous devez utiliser le ScrollView en tant que parent, Et vous pouvez aussi utiliser le défilement méthode de mouvement avec TextView.
Et Quand vous portrait à paysage de votre appareil que le temps de se produire un problème. (comme) l'intégralité de la page est scrollable mais de défilement méthode de mouvement ne peuvent pas travailler.
si vous avez encore besoin d'utiliser le ScrollView à titre de parent ou de défilement méthode de mouvement alors vous pouvez aussi utiliser en dessous de desc.
Si vous n'avez pas tous les problèmes, alors vous utilisez EditText au lieu de TextView
voir ci-dessous :
Ici, l'EditText se comporte comme TextView
Et votre problème sera résolu
OriginalL'auteur D Prince
XML, Vous pouvez utiliser
android:scrollHorizontally
AttributSi le texte est autorisée à être plus large que la vue (et, par conséquent, vous pouvez faire défiler horizontalement).
Peut être une valeur booléenne, comme "vrai" ou "faux".
Prigramacaly -
setHorizontallyScrolling(boolean)
OriginalL'auteur sam
Essayez ceci:
OriginalL'auteur mohamad sheikhi