|
|
|||||
"Умное" обрезание длинного текста
Салют!
Хочу спросить совета у людей, которы на "ты" с ТекстФилдами. У меня есть лейбл фиксированой ширины. Если текст в него не влазит, нужно выкинуть лишние символы справа и вставить вместо них троеточие. Для нагладности вот вам ример: посмотрите на ту вкладку своего браузера где открыта эта страница. Скорее всего название страници "обрезано" и втиснуто в допустимую ширину. Чтобы достчь такого результата я к исходной строке приконекчиваю троеточие (в самом начале) и постепенно отсекаю символы справа, пока ширина текста в текстфилде не будет хотя бы на 4 ченьше, чем ширина самого текстфилда. После этого я убираю тоеточие вначале стрки и пихаю эго в конец. Алгоритм рабочий, но он мне не очень нравится, так как для каждого отсечения нужно дергать текстфилд. Может есть у кого нить грамотное решение? |
|
|||||
Оно?
Добавлено через 2 минуты Хотя похоже не совсем то, но отрезать до определенной длины позволяет. А дальше я бы просто зрительно посчитал сколько букв входит в видимую часть текстового поля (учитывая самые широкие буквы типа М и Ш), и урезал текст до этой длины, если textWidth больше ширины поля |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А по-моему вполне нормальный подход, ибо рассчитывать математикой тут не получится все-равно: буквы разной ширины.
Есть еще другие способы "обрезания" — VanishLabel например, когда строка в конце постепенно становится прозрачной, и его расширенные анимированные варианты, когда строка при наведении двигается в "окошке" лейбла, давая прочитать себя полностью — автоматически проматывается или в зависимости от положения курсора, как в фотогалерейных скроллерах.. Ну это слегка вычурно конечно, для некоторых сайтов подходит, а для GUI программного приложения слишком неожиданно))
__________________
Reality.getBounds(this); |
|
|||||
[+1 22.04.13]
[+1 06.03.13] Регистрация: Apr 2012
Сообщений: 239
|
можно пройтись по всем буквам/цифрам/символам циклом (для конкретного шрифта) и составить словарик ширин символов, потом считать математически
|
|
|||||
Я делал так:
1. Знаем длину и позицию TextField-a, соответственно, знаем точку, где заканчивается текст. 2. Смещаем точку на величину, равную длине троеточия в данном формате текста(можно расчитать предварительно). 3. Обрезаем все после символа на полученной точке(FText.getCharIndexAtPoint), добавляем к тексту троеточие. Алгоритм похож на приведенный в нулевом топике, но вдруг поможет |
|
|||||
Цитата:
В большинстве случаев с запасом хватит просто знать количество символов, и может среднюю ширину символа.
__________________
adobe AS3 manual |
|
|||||
мой вариант ресурсоемкий, но я его применял для небольшого текста.
сначала присваиваю полную строку, а потом через цикл while обрезаю по символу, пока textField не будет допустимых размеров. после цикла, убираем еще 2 или 3 символа и добавляем 3 точки. |
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
есть ещё getCharBoundaries(charIndex:int):Rectangle, но да getCharIndexAtPoint лучший вариант
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Уменьшать межсимвольное расстояние до определенного момента, затем выполнять обрезку точечками.
|
Часовой пояс GMT +4, время: 11:02. |
|
« Предыдущая тема | Следующая тема » |
|
|