Estou realmente procurando uma resposta para isso .
Deseja definir a largura de um TextView com base em um número ou caracteres. Portanto, se eu quiser que sempre tenha 3 caracteres de largura, posso definir isso e ele se ajustará com base na configuração textSize. Sem isso, eu tenho que definir uma largura para 50dip ou algo assim, que pode ou não estar certo dependendo do tamanho da fonte.
sp
.minEms
provavelmente é uma resposta melhor.Respostas:
Respondendo minha própria pergunta ...
E o vencedor é: definir o
minEms
atributo (android:minEms
) !!!Então, " ems " se refere ao tamanho do caractere mais largo, normalmente um "M", entendeu? Portanto, definir minEms como um valor inteiro, digamos 3, em um EditText ou TextView deve garantir que ele tenha pelo menos 3 caracteres de largura. Você também pode definir maxEms.
Portanto, a resposta de Kyle neste tópico, embora errada, me fez encontrar a resposta, então, obrigado Kyle.
fonte
layout_width
necessário quewrap_content
minEms e maxEms funcionem conforme o pretendido, como esta resposta indica.A maioria das fontes não define todas as larguras de caracteres como idênticas. Courier é talvez a exceção mais usada para isso, mas geralmente olhe para a diferença entre um i e um A, por exemplo. Isso torna o que você está pedindo para fazer um pouco problemático.
fonte
Tente usar:
android:maxLength="3"
Isso limitará seu texto a um número específico de caracteres.
fonte
ems
, ao contrário das crenças populares (ou pelo menos da maioria dos tópicos sobre ems aqui), não é baseado na largura de um único 'M'.Era originalmente assim na tipografia, mas no meio digital, incluindo Android, seu significado foi mudado para o tamanho da fonte usada, ou em outras palavras, sua altura (excluindo qualquer preenchimento para acentos / diacríticos).
Isso significa que quando você especifica o
ems
para um TextView, ele o usarátextSize
como base e o multiplicará peloems
especificado.Por exemplo, se você definir um TextView de 16 sp
ems
para 4, sua largura será de 64 sp. Você pode testá-lo facilmente usando dois TextView (comincludeFontPadding
definido como false) lado a lado dentro de um ConstraintLayout (para alavancar seulayout_constraintDimensionRatio
).fonte