Я хотел бы предложить простой поиск лучшего размера точки, используя самый большой текст, который вам нужно, чтобы соответствовать. Это можно сделать один раз при запуске. (Ну, может быть, дважды — один раз для пейзажа и один раз для портрета). Первым шагом будет инициализация Paint с помощью шрифта, который вы хотите использовать для отображения. Затем вызовите эту функцию
public void setBestTextSize(String longestText, int targetWidth, Paint paint) {
float size = paint.getTextSize(); // initial size
float w = paint.meaasureText(longestText);
size = targetWidth * size/w;
paint.setTextSize(size);
// test if we overshot
w = paint.measureText(longestText);
while (w > targetWidth) {
--size;
paint.setTextSize(size);
w = paint.measureText(longestText);
}
бинарный поиск в цикле может быть теоретически быстрее, но это должно сделать очень хорошо, так как ширина текста имеет масштаб приблизительно линейно с размером шрифта и первым шагом до петли должны получить размер довольно близко.
Альтернативный подход, который прекрасно сочетается с изменениями размера вида, показан в this thread.
Спасибо за ваш ответ. Мои знания ограничены, и я не совсем понимаю, как это работает или как его реализовать. Если длина строки длинной строки имеет разрывы строк, она учитывает их? Работает ли этот код для горизонтального масштабирования? – Lorof
@Lorenz - Это работает путем измерения горизонтальной протяженности текста при различных размерах шрифта и масштабирования размера, чтобы размер не превышал доступную ширину. Я не уверен, что он учитывает разрывы строк; что будет зависеть от того, как «Paint.measureText» обрабатывает разрывы строк при измерении текста. Все, что я могу предложить, это попробовать, или просто прокормить его самой длинной сплошной линией. –
Извините, еще несколько вопросов. Я использую setBestTextSize() вместо setTextSize()? Как мне найти таргетинг, потому что некоторые телефоны сообщают об этом значении неправильно (или так я слышал). Как инициализировать Paint и что мне вводить в качестве последнего аргумента в void? Извините, что я попробовал поиск по Google, но я все еще очень новичок в программировании ... Еще раз спасибо – Lorof