Как получить высоту текста с фиксированной шириной и получить длину текста, которая вписывается в рамку?

Ну, мне удалось задать все мои вопросы в названии. Мне нужно разбить длинный текст на столбцы / фреймы и разместить их для просмотра. Я уже копаю решения на пару дней, но я не могу найти никаких примеров или четкой документации о том, как выполнить любую из моих задач. Я видел некоторые упоминания о StaticLayout, но я не знаю, как правильно использовать его. Что касается высоты текста, я пробовал метод getTextBounds TextPaint, но он не имеет ограничения по ширине, и похоже, что он измеряет только одну строку (ну, может быть, я делал что-то неправильно).

Может быть, у кого-то есть пример StaticLayout или его использования подкласса?

Все выглядит так просто «на бумаге»: создайте «рамку», проверьте, сколько символов в нее вписывается, заполните кадр и поместите его, повторите до конца текста, и все же я ничего не могу найти о том, как это сделать 🙂

Я не знаю точного ответа на ваш вопрос, но обычно вы можете рассчитать ширину и высоту текста на основе типа и размера шрифта с помощью методов, доступных в графической библиотеке.

Я сделал это на C # и Java. В C # он называется «MeasureString», а в Java – «FontMetrics».

РЕДАКТИРОВАТЬ:

Посмотрите, полезен ли этот код (я не скомпилировал его, потому что у меня нет SDK для Android):

String myText=""; String tempStr=""; int startIndex=0; int endIndex=0; //calculate end index that fits endIndex=myPaint.breakText(myTest, true, frameWidth, null)-1; //substring that fits into the frame tempStr=myText.substring(startIndex,endIndex); while(endIndex < myText.length()-1) { //draw or add tempStr to the Frame //at this point //set new start index startIndex=endIndex+1; //substring the remaining of text tempStr=myText.substring(startIndex,myText.length()-1); //calculate end of index that fits endIndex=myPaint.breakText(tempStr, true, frameWidth, null)-1; //substring that fits into the frame tempStr=myText.substring(startIndex,endIndex); } 

Аналогичные методы доступны для Android:

 breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) 

Измерить текст, если раньше измеренная ширина превысила максимальную ширину.

 measureText(String text) 

Верните ширину текста.

http://developer.android.com/reference/android/graphics/Paint.html

Intereting Posts
Создайте анимацию, изменив изображение в ImageView с помощью Timer (или Handler) Невозможно получить «счет» в полях «любит» и «комментарии», используя доступ к моему зарегистрированному приложению access_token Получение ошибки 500 при использовании Google REST API Определение уровня разрешения Android Как проверить, подключены ли Bluetooth-гарнитуры на Android? ListView без ListActivity Полностью закрытие приложения Android для мобильного телефона «Не удалось установить на USB-накопитель или SD-карту» приложение для установки ошибок на устройствах Samsung Добавить / прочитать вес и высоту в GoogleFit? Android Не удалось слияние манифеста: uses-sdk: minSdkVersion 1 не может быть меньше версии 7 Проблема Strange CardView: («Не удалось найти: com.android.support:cardview-v7:21.0.+» Ошибка) Как выйти из цикла while через определенное время? Как изменить предварительный просмотр панели запуска виджета? GetHeight возвращает 0 для всех объектов Android UI Android ICS Launcher 4.0.x не может поддерживать ориентацию экрана