55 votes

Le redimensionnement automatique de TextView ne fonctionne pas (Android O)

J'utilise de nouvelles autosize fonctionnalité ajoutée à l'appui de la bibliothèque de 26. J'ai lu une documentation qui peut être trouvé ici : https://developer.android.com/preview/features/autosizing-textview.html

Je suppose qu'il doit travailler de cette façon: Vous pouvez activer la fonction d'auto-calibrage de cet attribut: app:autoSizeTextType="uniform". Je pense qu' TextView doit utiliser tout l'espace disponible pour afficher un texte en entier (et pas seulement une partie, il ne devrait pas être recadrée) et l' textSize devrait être aussi grand que possible. Si vous avez besoin de limiter au maximum ou minimum de la taille du texte vous pouvez ensuite utiliser ces deux attributs:

app:autoSizeMinTextSize="XXsp" // (you can also use px or dp values.)

ou

app:autoSizeMaxTextSize="XXsp"

So far So good. Disons que j'ai besoin d'un TextView avec 56dp largeur. J'ai des textes avec une longueur différente et je veux mettre ces textes à ce TextView. Il devrait être automatiquement redimensionnée afin qu'il affiche le texte en entier (tous les caractères + pas recadrée) dans le plus grand possible textSize.

C'est mon TextView:

<android.support.v7.widget.AppCompatTextView
        android:id="@+id/vName"
        style="@style/TextView.AutoSize"
        android:layout_width="56dp"
        android:gravity="bottom|center_horizontal"
        android:maxLines="1"
        app:autoSizeMinTextSize="1px"
        app:autoSizeTextType="uniform"
        app:layout_constraintBottom_toTopOf="@id/vGuideline"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent" />

Malheureusement, le mode texte est recadrée. Je voulais mettre cette Chaîne comme un texte à la TextView ci-dessus: "Groupa" mais c'est le résultat: enter image description here

(TextView est à l'intérieur de ConstraintLayout jaune cercle d'arrière-plan.)

Comme vous pouvez le voir le textview n'est pas redimensionnée à tous. Avez-vous une idée de quoi faire?

Merci.

59voto

Henning Points 509

En plus des réponses correctes, j'ai trouvé un autre point qui empêche le redimensionnement automatique de fonctionner.

N'utilisez pas android:singleLine="true" avec l'autosizing. Utilisez plutôt les nouveaux android:maxLines="1" .

57voto

Sira Lam Points 1428

J'ai testé ce pour quelques situations, et ont le dessous de conclusion:

Vous devez avoir délimité la largeur et la hauteur. Par exemple, si vous définissez la largeur pour être match_parent mais wrap_content pour la hauteur, je pense que Android ne savez pas comment vous voulez étirer votre texte. Dans votre exemple, vous n'avez pas une hauteur spécifique, donc je pense que c'est pourquoi il ne fonctionne pas.

Par exemple:

wrap content height for a text

specific height for a text

Je ne sais pas pourquoi Android document officiel serait d'utiliser wrap_content comme un exemple...

Et comme vous pouvez le voir je n'ai pas utiliser d'autres attributs dans mon exemple, il n'est probablement pas le problème des attributs incorrects.

Et, oui, le TextView que j'utilise est android.de soutien.v7.widget de.AppCompatTextView.

Et tant que vous utilisez la bibliothèque 26.0.0 ou au-dessus, il est assez bon.

EDIT:

Comme pour ConstraintLayout, le principal est le même. Vous devez avoir délimité la largeur et la hauteur, ce qui signifie l'un de ci-dessous pour chaque dimension:

  1. Vous avez spécifié une valeur absolue, pour que la dimension (largeur ou hauteur)

  2. Vous avez défini Contrainte pour les deux directions

Par exemple:

All 4 directions are constrainedHeight set to be an absolute valueWidth set to be an absolute value

Mise à JOUR: (2017-09-21)

J'ai testé que, malheureusement, il semble qu'il ne prend pas en charge personnalisée de police, ce qui est une fonction publiés dans la bibliothèque de prise en charge v26...

11voto

John Le Points 381

Quelle valeur avez-vous définie sur android: attribut layout_height?

Dans le document : " Si vous définissez la taille automatique dans un fichier XML, il n'est pas recommandé d'utiliser la valeur" wrap_content "pour les attributs layout_width ou layout_height d'un TextView. Cela pourrait produire des résultats inattendus. "

10voto

Apollo Points 91

J'ai eu le même problème. Je l'ai résolu en changeant deux lignes dans ma note: compile 'com.android.support:support-v4:26.0.1' et compile 'com.android.support:appcompat-v7:26.0.1' Pour adapter des textes plus longs, vous devez ajouter les quatre options, comme ceci:

 <android.support.v7.widget.AppCompatTextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/your_string"
        app:autoSizeTextType="uniform"
        app:autoSizeMaxTextSize="13sp"
        app:autoSizeMinTextSize="5sp"
        app:autoSizeStepGranularity="1sp"/>
 

6voto

0101100101 Points 1292

Dans mon cas, le problème était quelque chose de très stupide: Bien que la conversion automatique ait toujours bien fonctionné pour moi, sur exactement un TextView, j'ai utilisé les espaces de noms android: au lieu de app: ! J'étais totalement inconscient de mon erreur et je me demandais pourquoi cela ne fonctionnait pas. Ainsi, lorsque vous utilisez un thème AppCompat assurez-vous de toujours utiliser les attributs AppCompat , et non les attributs natifs.

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