Je cherche vraiment une réponse à cela .
Vous souhaitez définir la largeur d'un TextView en fonction d'un nombre ou de caractères. Donc, si je veux qu'il soit toujours large de 3 caractères, je pourrais le définir et il s'ajustera en fonction du paramètre textSize. Sans cela, je dois définir une largeur à 50dip ou quelque chose du genre, ce qui peut ou non être correct en fonction de la taille de la police.
sp
.minEms
c'est probablement une meilleure réponse.Réponses:
Répondre à ma propre question ...
Et le gagnant est: définissez l'
minEms
attribut (android:minEms
) !!!Donc, " ems " fait référence à la taille du caractère le plus large, généralement un "M", compris? Ainsi, la définition de minEms sur une valeur entière, disons 3, sur un EditText ou TextView doit garantir une largeur d'au moins 3 caractères. Vous pouvez également définir les maxEms.
Donc la réponse de Kyle sur ce fil, bien que fausse, m'a amené à trouver la réponse, alors merci Kyle.
la source
layout_width
doit êtrewrap_content
pour que minEms et maxEms fonctionnent comme prévu, comme le souligne cette réponse .La plupart des polices ne définissent pas toutes les largeurs de caractères pour qu'elles soient identiques. Courier est peut-être l'exception la plus utilisée à cela, mais regardez généralement la différence entre un i et un A, par exemple. Cela rend ce que vous demandez de faire un peu un problème.
la source
Essayez d'utiliser:
android:maxLength="3"
Cela limitera votre texte à un nombre spécifique de caractères.
la source
ems
, contrairement aux croyances populaires (ou du moins de la plupart des discussions sur les ems ici), n'est pas basée sur la largeur d'un seul «M».C'était à l'origine comme ça en typographie, mais sur support numérique, y compris Android, sa signification a été décalée vers la taille de la police utilisée, ou en d'autres termes, sa hauteur (à l'exclusion de tout rembourrage pour les accents / signes diacritiques).
Cela signifie que lorsque vous spécifiez le
ems
pour un TextView, il l'utiliseratextSize
comme base et le multipliera par leems
spécifié.À titre d'exemple, si vous définissez un TextView 16sp
ems
sur 4, sa largeur sera de 64sp. Vous pouvez facilement le tester en utilisant deux TextView (avecincludeFontPadding
la valeur false) côte à côte dans un ConstraintLayout (pour en tirer partilayout_constraintDimensionRatio
).la source