Establecer el ancho de TextView en términos de caracteres

88

Realmente estoy buscando una respuesta a esto .

Desea establecer el ancho de un TextView en función de un número o caracteres. Entonces, si quiero que siempre tenga 3 caracteres de ancho, podría configurarlo y se ajustará según la configuración de tamaño de texto. Sin esto, tengo que establecer un ancho en 50 dip o algo así, que puede ser correcto o no dependiendo del tamaño de fuente.

Fraggle
fuente
Posiblemente haya una forma de hacer esto especificando su dimensión en sp.
CommonsWare
@CommonsWare, sí, si puede decirme cuántos SP equivalen a un carácter que podría funcionar (pero vea mi respuesta a continuación usando minEms, ya que creo que eso es lo que quiero). Entonces, si el tamaño del texto = 30 sp y quiero 3 caracteres de ancho, ¿configuro el ancho en 90 sp? Supongo que podría intentarlo.
Fraggle
2
Sí, minEmsprobablemente sea una mejor respuesta.
CommonsWare

Respuestas:

177

Respondiendo a mi propia pregunta ...

Y el ganador es: ¡¡¡establece el minEmsatributo ( android:minEms) !!!

Entonces, " ems " resulta que se refiere al tamaño del carácter más ancho, típicamente una "M", ¿entiendes? Por lo tanto, establecer minEms en un valor entero, digamos 3, en un EditText o TextView debería garantizar que tenga al menos 3 caracteres de ancho. También puede configurar maxEms.

Entonces, la respuesta de Kyle en este hilo, aunque incorrecta, hizo que encontrara la respuesta, así que gracias Kyle.

Fraggle
fuente
3
por supuesto, todavía estoy probando para ver si esto realmente funciona, pero hasta ahora lo parece.
Fraggle
8
También tenga en cuenta que layout_widthdebe ser wrap_contentpara que minEms y maxEms funcionen según lo previsto, como señala esta respuesta .
Jonik
0

La mayoría de las fuentes no establecen que todos los anchos de caracteres sean idénticos. Courier es quizás la excepción más utilizada a esto, pero en general observe la diferencia entre una i y una A, por ejemplo. Esto hace que lo que estás pidiendo sea un problema.

mah
fuente
correcto, así que esperaba que este problema se hubiera resuelto. Por lo tanto, establezca el ancho en términos de caracteres y luego, en el momento de la visualización, averigüe las características de la fuente para ese campo y determine qué tan grande debe ser según eso. Realmente preguntando si este problema se había resuelto, de una manera agradable y fácil. Parece que no.
Fraggle
0

Intente usar: android:maxLength="3"

Esto limitará su texto a un número específico de caracteres.

KyleM
fuente
0

ems, contrariamente a las creencias populares (o al menos de la mayoría de los hilos sobre ems aquí), no se basa en el ancho de una sola 'M'.

Originalmente era así en tipografía, pero en el medio digital, incluido Android, su significado se cambió al tamaño del tipo de letra utilizado, o en otras palabras, a su altura (excluyendo cualquier relleno para acentos / signos diacríticos).

Eso significa que cuando especificas emspara un TextView, lo usará textSizecomo base y lo multiplicará por el emsespecificado.

Como ejemplo, si establece un TextView de 16sp emsen 4, su ancho será de 64sp. Puede probarlo fácilmente utilizando dos TextView (con includeFontPaddingestablecido en falso) uno al lado del otro dentro de un ConstraintLayout (para aprovechar su layout_constraintDimensionRatio).

Andrei Stakov
fuente