462 votes

TextView Android Justifier le texte

Comment obtenir le texte d'un TextView doit être justifié (avec du texte à fleur de peau à gauche et à droite) ?

J'ai trouvé une solution possible ici mais cela ne fonctionne pas (même si vous changez vertical-center en center_vertical, etc).

0 votes

La réponse de @Jimbo est correcte, il travaille définitivement pour mon cas sur texte d'entrée et aperçu du texte pour la langue arabe, la saisie et l'affichage se font de droite à gauche, mais pour la saisie du texte, j'ai dû ajouter gravity="right".

0 votes

0 votes

289voto

CommonsWare Points 402670

Je ne crois pas qu'Android supporte une justification complète.

MISE À JOUR 2018-01-01 : Compatible avec Android 8.0+. modes de justification avec TextView .

5 votes

Après une analyse plus approfondie, vous pourriez essayer Android:gravity="fill_horizontal". Cela est décrit comme "Augmenter la taille horizontale de l'objet si nécessaire pour qu'il remplisse complètement son conteneur", mais je ne sais pas comment ils "augmentent" le texte.

8 votes

Android:gravity="fill_horizontal" n'a pas fonctionné non plus. Il semble qu'Android ne supporte pas la justification après tout, oh bien :)

6 votes

Non, vous ne pouvez pas définir la propriété comme la gravité. Mais vous pouvez toujours définir la justification de votre texte en prenant la vue web au lieu de la vue texte. Vous pouvez vous référer à sceau.io/2010/12/seul moyen de s'aligner sur les textes dans les blocs.html . (Volé de stackoverflow.com/questions/5976627/ )

167voto

Jimbo Points 3751

La réponse de @CommonsWare est correcte. Android 8.0+ prend en charge la "Justification complète" (ou simplement "Justification", comme on l'appelle parfois de manière ambiguë).

Android prend également en charge l'"alignement du texte à gauche/à droite". Voir l'article de wikipedia sur Justification pour la distinction. De nombreuses personnes considèrent que le concept de "justification" englobe la justification complète ainsi que l'alignement du texte à gauche et à droite, et c'est ce qu'elles recherchent lorsqu'elles veulent faire un alignement du texte à gauche et à droite. Cette réponse explique comment réaliser l'alignement gauche/droite du texte.

Il est possible d'obtenir un alignement du texte à gauche et à droite (par opposition à une justification complète, comme le demande la question). Pour la démonstration, je vais utiliser un formulaire de base à deux colonnes (étiquettes dans la colonne de gauche et champs de texte dans la colonne de droite) comme exemple. Dans cet exemple, le texte des étiquettes de la colonne de gauche sera aligné à droite afin qu'il apparaisse au même niveau que les champs de texte de la colonne de droite.

Dans la mise en page XML, vous pouvez faire en sorte que les éléments TextView eux-mêmes (la colonne de gauche) soient alignés sur la droite en ajoutant l'attribut suivant dans tous les TextViews :

<TextView
   ...
   android:layout_gravity="center_vertical|end">
   ...
</TextView>

Cependant, si le texte s'étend sur plusieurs lignes, il sera toujours aligné à gauche dans le TextView. L'ajout de l'attribut suivant permet d'aligner le texte réel sur la droite (avec un décalage vers la gauche) à l'intérieur du TextView :

<TextView
   ...
   android:gravity="end">
   ...
</TextView>

Ainsi, le gravité spécifie comment aligner le texte à l'intérieur du TextView. layout_gravity spécifie comment aligner/présenter l'élément TextView lui-même.

13 votes

Si je comprends bien, et compte tenu des résultats des tests effectués, tout ce que cela fait, c'est aligner le texte à gauche ou à droite. Cela ne justifie pas le texte, n'est-ce pas ?

15 votes

Excellent. Juste pour ajouter, si vous voulez une justification centrale, vous pouvez faire android:layout_gravity="center_horizontal|center" android:gravity="center" .

0 votes

Cela fonctionne définitivement pour mon cas sur texte d'entrée et aperçu du texte pour la langue arabe de droite à gauche entrée et affichage

140voto

Kondzio Points 914

Pour justifier le texte dans Android, j'ai utilisé WebView

    setContentView(R.layout.main);

    WebView view = new WebView(this);
    view.setVerticalScrollBarEnabled(false);

    ((LinearLayout)findViewById(R.id.inset_web_view)).addView(view);

    view.loadData(getString(R.string.hello), "text/html; charset=utf-8", "utf-8");

et html.

<string name="hello">
<![CDATA[
<html>
 <head></head>
 <body style="text-align:justify;color:gray;background-color:black;">
  Lorem ipsum dolor sit amet, consectetur 
  adipiscing elit. Nunc pellentesque, urna
  nec hendrerit pellentesque, risus massa
 </body>
</html>
]]>
</string>

Je ne peux pas encore télécharger d'images pour le prouver, mais "ça marche pour moi".

3 votes

C'est une bonne solution. Pour info, vous n'avez pas besoin de la plupart du html supplémentaire. La balise body avec le texte aligné est suffisante.

5 votes

Cela fonctionne bien. Notez que vous pouvez rendre l'arrière-plan transparent en suivant les instructions suivantes view.loadData() avec view.setBackgroundColor("#00000000") .

0 votes

Je n'ai cependant pas réussi à obtenir le chargement d'une police/type de caractères personnalisée. J'ai essayé ce et ce suggestion, sans succès.

101voto

bluejamesbond Points 1937

MISE À JOUR

Nous avons créé une classe simple pour cela. Il existe actuellement deux méthodes pour obtenir ce que vous recherchez. Les deux requièrent PAS DE VISUALISATION WEB et SUPPORTS SPANNABLES .

BIBLIOTHEQUE : https://github.com/bluejamesbond/TextJustify-Android

SUPPORTS : Android 2.0 à 5.X

SETUP

// Please visit Github for latest setup instructions.

SCREENHOT

Comparison.png

0 votes

C'est une aide précieuse, mais en l'utilisant, mes TextViews ne gardent pas le format original, je pense aux marges, au style du texte, et je pense que la taille du texte non plus, continuez à travailler dessus, cela devrait être une aide précieuse.

0 votes

Eh bien, je ne peux pas établir ces classes. L'une d'entre elles n'a pas de nom de paquet, l'autre donne une erreur jaune. En fait, je ne peux pas faire confiance.

0 votes

Belle bibliothèque, mais je ne sais toujours pas comment ajouter une mise en forme au texte en utilisant cette bibliothèque.

30voto

ccheng Points 1242

J'ai écrit un widget basé sur un textview natif pour le faire.

github

0 votes

Je recommanderais celui-ci, principalement parce qu'il est basé sur le textview original du sdk officiel d'Android, qui à mon avis est beaucoup plus léger que la technique du webview que beaucoup de gens postent concernant ce sujet commun. Si vous construisez une application qui doit être économe en mémoire, en utilisant des objets listview par exemple, vous pouvez envisager d'utiliser quelque chose comme ceci. J'ai déjà essayé, et cela fonctionne comme prévu. Si vous en connaissez une autre meilleure comme celle-ci, merci de partager votre expérience avec moi.

0 votes

Beau travail, d'ailleurs. Ce que je cherchais.

5 votes

Ne supporte pas les langues RTL comme le persan

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X