Naprawdę szukam odpowiedzi na to pytanie .
Chcesz ustawić szerokość TextView na podstawie liczby lub znaków. Więc jeśli chcę, aby zawsze miał 3 znaki szerokości, mogę to ustawić i dostosuje się na podstawie ustawienia textSize. Bez tego muszę ustawić szerokość na 50dip lub coś w tym stylu, co może, ale nie musi, być właściwe w zależności od rozmiaru czcionki.
sp
.minEms
to prawdopodobnie lepsza odpowiedź.Odpowiedzi:
Odpowiadając na moje własne pytanie ...
Zwycięzcą jest: ustaw
minEms
atrybut (android:minEms
) !!!Więc "Okazuje się, że ems ” odnosi się do rozmiaru najszerszego znaku, zazwyczaj „M”, rozumiesz? Zatem ustawienie minEms na wartość całkowitą, powiedzmy 3, w EditText lub TextView powinno zapewnić, że ma co najmniej 3 znaki szerokości. Możesz również ustawić maxEms.
Tak więc odpowiedź Kyle'a w tym wątku, chociaż błędna, spowodowała, że znalazłem odpowiedź, więc dziękuję Kyle.
źródło
layout_width
musi byćwrap_content
dla minEms i maxEms do pracy zgodnie z przeznaczeniem, jak owa odpowiedź wskazuje.Większość czcionek nie ustawia jednakowych szerokości znaków. Courier jest prawdopodobnie najczęściej używanym wyjątkiem od tej reguły, ale ogólnie spójrz na przykład na różnicę między i a A. To sprawia, że to, o co prosisz, stanowi pewien problem.
źródło
Spróbuj użyć:
android:maxLength="3"
Spowoduje to ograniczenie tekstu do określonej liczby znaków.
źródło
ems
, wbrew powszechnym przekonaniom (a przynajmniej z większości wątków o emach tutaj), nie opiera się na szerokości pojedynczego „M”.Pierwotnie tak było w typografii, ale w nośniku cyfrowym, w tym na Androidzie, jego znaczenie zostało przesunięte do rozmiaru użytego kroju pisma, czyli innymi słowy, jego wysokości (z wyłączeniem wszelkich dopełnień dla akcentów / znaków diakrytycznych).
Oznacza to, że kiedy określisz
ems
dla TextView, użyje gotextSize
jako podstawy i pomnoży go przezems
określony.Na przykład, jeśli ustawisz 16sp TextView
ems
na 4, jego szerokość będzie wynosić 64 sp. Możesz go łatwo przetestować, używając dwóch TextView (zincludeFontPadding
ustawieniem na false) obok siebie w ConstraintLayout (aby wykorzystać jegolayout_constraintDimensionRatio
).źródło