Встановити ширину TextView з точки зору символів


88

Дійсно шукаю відповіді на це .

Хочете встановити ширину TextView на основі числа або символів. Отже, якщо я хочу, щоб він завжди мав ширину 3 символи, я міг би це встановити, і він буде коригуватися на основі налаштування textSize. Без цього я повинен встановити ширину 50dip або щось інше, що може бути неправильним, а може і не залежно від розміру шрифту.


Можливо, є спосіб зробити це, вказавши свій розмір у sp.
CommonsWare

@CommonsWare, так, якщо ви можете сказати мені, скільки SP дорівнює одному символу, який може працювати (але див. Мою відповідь нижче, використовуючи minEms, оскільки я думаю, що це те, що я хочу). Отже, якщо розмір тексту = 30сп, і я хочу ширину 3 символи, чи встановлюю ширину 90сп? Думаю, я міг спробувати.
Fraggle

2
Так, minEmsце, мабуть, краща відповідь.
CommonsWare

Відповіді:


177

Відповідь на власне запитання ...

І переможець: встановіть minEmsатрибут ( android:minEms) !!!

Отже, " емс " виявляється стосується розміру самого широкого символу, як правило, "М", розумієте? Тому встановлення minEms до цілочисельного значення, скажімо 3, у EditText або TextView повинно забезпечити ширину щонайменше 3 символів. Ви також можете встановити maxEms.

Тож відповідь Кайла на цю тему, хоч і неправильна, змусила мене знайти відповідь, тож спасибі Кайлу.


3
звичайно, я все ще тестую, чи справді це працює, але поки це схоже.
Fraggle

8
Також зверніть увагу , що layout_widthповинно бути wrap_contentдля minEms і maxEms до роботи за призначенням, так як ця відповідь вказує.
Jonik

0

Більшість шрифтів не встановлюють однакову ширину всіх символів. Кур'єр - це, мабуть, найбільш вживаний виняток з цього, але загалом подивіться на різницю між i та A, наприклад. Це робить те, що ваше прохання зробити трохи проблемою.


правильно, тому я сподівався, що ця проблема була вирішена. Тож встановіть ширину з точки зору символів, а потім під час відображення з’ясуйте характеристики шрифту для цього поля та визначте, наскільки великим воно повинно бути на основі цього. Тож справді запитую, чи вирішена ця проблема, приємним простим способом. Здається, ні.
Fraggle

0

Спробуйте використати: android:maxLength="3"

Це обмежить ваш текст певною кількістю символів.


0

ems, всупереч поширеній думці (або, принаймні, з більшості повідомлень про ems тут), не базується на ширині одиниці "M".

Спочатку це було так у типографіці, але в цифровому носії, включаючи Android, його значення було зміщено на розмір використовуваного шрифту або, іншими словами, на його висоту (виключаючи будь-які відступи для акцентів / діакритики).

Це означає, що коли ви вказуєте emsдля TextView, він використовуватиме його textSizeяк основу і помножить на emsвказаний.

Як зразок, якщо ви встановите 16sp TextView emsна 4, його ширина буде 64sp в ширину. Ви можете легко перевірити його, використовуючи два TextView (із includeFontPaddingвстановленим значенням false) поруч у ConstraintLayout (щоб використовувати його layout_constraintDimensionRatio).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.