Страницы

среда, 29 сентября 2010 г.

Ellipsize и TextView

Не секрет, что у мобильных устройств экран невелик, и поэтому часто длинный текст не умещается на экране целиком. Можно на это забить и оставить текст обрезанным либо можно поставить многоточие на месте обрезки (см. рисунок). Для этого есть метод setEllipsize() и соответствующий ему атрибут android:ellipsize.



Всё бы хорошо, но при попытке применения их я столкнулся с неожиданным поведением метода setEllipsize() у TextView: для однострочного текста из нескольких слов метод не работает. Строка обрезается, но многоточие в конце не появляется. То же самое и с XML-атрибутом android:ellipsize. Вот так это выглядит:


Можно заметить, что метод работает, но работает неверно: неуместившийся остаток текста просто отбрасывается.

Выяснил, что это давний баг, который не исправляется в течение двух лет. В багтрекере андроида есть соответствующие записи: http://code.google.com/p/android/issues/detail?id=882 и http://code.google.com/p/android/issues/detail?id=10554

Одним из вариантов обхода бага является установка атрибута android:singleLine="true", но он объявлен deprecated (хотя и замечательно работает до сих пор).
Другой обходной путь - имитировать поведение атрибута android:singleLine другими атрибутами: android:lines="1" и android:scrollHorizontally="true".

Советую пройти в багтрекер и проголосовать за баг. Может его и исправят когда-нибудь.

Комментариев нет:

Отправить комментарий