J'affiche du texte dans une vue de texte qui semble trop longue pour tenir sur un seul écran. Je dois faire défiler mon TextView. Comment puis je faire ça?
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);
maxLines
vous oblige sûrement à saisir un nombre arbitraire; ce n'est pas quelque chose qui fonctionnera pour chaque taille d'écran et taille de police? Je trouve plus simple de simplement l'envelopper avec unScrollView
, ce qui signifie que je n'ai pas besoin d'ajouter d'autres attributs ou codes XML (comme définir la méthode de déplacement).ScrollView
prendre autant d'espace qu'il le faut (par exemple via l'android:fillViewport
attribut), soit vous définissez la taille spécifique que vous souhaitez. L'utilisationmaxLines
ne doit pas être utilisée pour définir des tailles d'éléments d'interface utilisateur, ce n'est donc pas une solution.Voici comment je l'ai fait purement en XML:
REMARQUES:
android:fillViewport="true"
combiné avecandroid:layout_weight="1.0"
fera que la vue de texte prendra tout l'espace disponible.Lors de la définition du Scrollview, NE PAS spécifier
android:layout_height="fill_parent"
sinon le scrollview ne fonctionne pas! (cela m'a fait perdre une heure tout à l'heure! FFS).CONSEIL DE PRO:
Pour faire défiler par programme vers le bas après avoir ajouté du texte, utilisez ceci:
la source
mTextView.getBottom()
, utilisez simplement la méthodemScrollView.fullScroll(View.FOCUS_DOWN)
car elle fait partie de l'API ScrollView. Voir ici et ici pour plus d'informations.LinearLayout
ou leScrollView
peut être inutile dans cet exemple (j'ai suppriméLinearLayout
complètement le). Il prévient également que pour leTextView
, il doitandroid:layout_height="wrap_content"
correspondre auScrollView
. Ces avertissements peuvent être dus aux 3 années qui se sont écoulées depuis la publication de cette réponse. Quoi qu'il en soit, cette réponse prend en charge le défilement et le défilement en douceur ... + 1<!--suppress AndroidLintUselessParent -->
au-dessus deScrollView
dans le fichier xml prendra soin de ces avertissements.Tout ce qui est vraiment nécessaire est le setMovementMethod (). Voici un exemple d'utilisation d'un LinearLayout.
Fichier main.xml
Fichier WordExtractTest.java
la source
ScrollView
méthode.StringBuilder
au lieu d'unString
... ce que vous avez est un peu inutile.Faites votre affichage de texte en ajoutant simplement ceci
la source
Il n'est pas nécessaire de mettre
Vous pouvez faire votre travail en ajoutant simplement:
Et, mettez ce code dans votre classe Java:
la source
Vous pouvez soit
TextView
unScrollView
; ouScrollingMovementMethod.getInstance();
.la source
La meilleure façon que j'ai trouvée:
Remplacez TextView par un EditText avec ces attributs supplémentaires:
Il n'est pas nécessaire d'encapsuler dans un ScrollView.
la source
ScrollView
est la bonne façon de procéder.Facile. Voici comment je l'ai fait:
Côté XML:
Côté Java:
Prime:
Pour laisser défiler la vue texte au fur et à mesure que le texte la remplit, vous devez ajouter:
dans le fichier XML TextView. Il défilera automatiquement à mesure que le texte entrera.
Bien sûr, vous devez ajouter le texte à l'aide de la fonction append au lieu de définir le texte:
Je l'ai utilisé à des fins de journal.
J'espère que ça aide ;)
la source
Il s'agit de "Comment appliquer ScrollBar à votre TextView", en utilisant uniquement XML.
Tout d'abord, vous devez prendre un contrôle Textview dans le fichier main.xml et y écrire du texte ... comme ceci:
Ensuite, placez le contrôle d'affichage de texte entre les vues de défilement pour afficher la barre de défilement de ce texte:
C'est ça...
la source
Cela fournira un texte défilant en douceur avec une barre de défilement.
la source
La "astuce pro" ci-dessus de Someone Somewhere ( rendre TextView défilable sur Android ) fonctionne très bien, cependant, que se passe-t-il si vous ajoutez dynamiquement du texte à ScrollView et souhaitez faire défiler automatiquement vers le bas après une ajout uniquement lorsque l'utilisateur est à le bas du ScrollView? (Peut-être parce que si l'utilisateur a fait défiler vers le haut pour lire quelque chose, vous ne voulez pas réinitialiser automatiquement vers le bas pendant un ajout, ce qui serait ennuyeux.)
Bref, le voici:
Le mTextStatus.getLineHeight () fera en sorte que vous ne faites pas défilerToBottom () si l'utilisateur se trouve dans une ligne à partir de la fin de ScrollView.
la source
Si vous souhaitez faire défiler le texte dans la vue de texte, vous pouvez suivre les étapes suivantes:
Vous devez d'abord avoir à sous-classer textview.
Et puis utilisez ça.
Voici un exemple de vue de texte sous-classée.
Maintenant, vous devez utiliser cela dans le XML de cette manière:
C'est ça.
la source
Ajoutez ce qui suit dans la vue de texte en XML.
Et enfin, ajoutez
dans le fichier Java.
la source
Je n'ai pas trouvé le défilement de TextView pour prendre en charge le geste «fling», où il continue de défiler après un mouvement vers le haut ou vers le bas. J'ai fini par l'implémenter moi-même parce que je ne voulais pas utiliser ScrollView pour diverses raisons, et il ne semblait pas y avoir de MovementMethod qui me permettait à la fois de sélectionner du texte et de cliquer sur des liens.
la source
En kotlin pour faire défiler la vue texte
et aussi ajouter en xml cette propriété
la source
Lorsque vous avez terminé avec défilement, ajoutez cette ligne à la dernière ligne de la vue lorsque vous entrez quoi que ce soit dans la vue:
la source
Si vous ne souhaitez pas utiliser la solution EditText, vous aurez peut-être plus de chance avec:
la source
Ajoutez ceci à votre disposition XML:
Et dans le code, vous devez écrire les lignes suivantes:
la source
Le code ci-dessous crée une vue de texte à défilement horizontal automatique:
Lors de l'ajout de TextView à l'utilisation xml
Définissez les propriétés suivantes de TextView dans onCreate ()
la source
vous pouvez le faire défiler maintenant.
la source
Utilisez-le comme ça
la source
Dans mon cas, Disposition des contraintes, AS 2.3.
Implémentation du code:
XML:
la source
J'ai lutté avec ça pendant plus d'une semaine et j'ai finalement trouvé comment faire fonctionner ça!
Mon problème était que tout défilait comme un «bloc». Le texte lui-même défilait, mais comme un morceau plutôt que ligne par ligne. Cela n'a évidemment pas fonctionné pour moi, car cela couperait les lignes en bas. Toutes les solutions précédentes n'ont pas fonctionné pour moi, j'ai donc conçu ma propre solution.
Voici de loin la solution la plus simple:
Créez un fichier de classe appelé: 'PerfectScrollableTextView' à l'intérieur d'un package, puis copiez et collez ce code dans:
Enfin changez votre 'TextView' en XML:
De:
<TextView
À:
<com.your_app_goes_here.PerfectScrollableTextView
la source
Mettez
maxLines
et à l'scrollbars
intérieur de TextView en xml.Puis en code java.
textView.setMovementMethod(new ScrollingMovementMethod());
la source
J'ai eu ce problème lorsque j'utilisais
TextView
à l'intérieur duScrollView
. Cette solution a fonctionné pour moi.la source
chaque fois que vous devez utiliser ScrollView en tant que parent , et vous utilisez également la méthode de mouvement de défilement avec TextView.
Et lorsque vous effectuez un portrait pour aménager votre appareil à ce moment, un problème se produit . (comme) toute la page peut défiler, mais la méthode de défilement ne peut pas fonctionner.
si vous devez toujours utiliser ScrollView comme méthode de mouvement parent ou de défilement, vous utilisez également ci-dessous desc.
Si vous n'avez aucun problème, vous utilisez EditText au lieu de TextView
voir ci-dessous :
Ici, le EditText se comporte comme TextView
Et votre problème sera résolu
la source
XML - Vous pouvez utiliser
android:scrollHorizontally
attributSi le texte est autorisé à être plus large que la vue (et peut donc être défilé horizontalement).
Peut être une valeur booléenne, telle que "true" ou "false".
Prigramacaly -
setHorizontallyScrolling(boolean)
la source
Essaye ça:
la source