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.
sp
.minEms
probablemente sea una mejor respuesta.Respuestas:
Respondiendo a mi propia pregunta ...
Y el ganador es: ¡¡¡establece el
minEms
atributo (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.
fuente
layout_width
debe serwrap_content
para que minEms y maxEms funcionen según lo previsto, como señala esta respuesta .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.
fuente
Intente usar:
android:maxLength="3"
Esto limitará su texto a un número específico de caracteres.
fuente
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
ems
para un TextView, lo usarátextSize
como base y lo multiplicará por elems
especificado.Como ejemplo, si establece un TextView de 16sp
ems
en 4, su ancho será de 64sp. Puede probarlo fácilmente utilizando dos TextView (conincludeFontPadding
establecido en falso) uno al lado del otro dentro de un ConstraintLayout (para aprovechar sulayout_constraintDimensionRatio
).fuente