Я бы предложил простой поиск лучшего размера точки, используя самый большой текст, который вам нужно уместить. Это можно сделать один раз при запуске. (Ну, может быть, дважды - один раз для пейзажа и один раз для портрета). Первым шагом будет инициализация 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);
}
Бинарный поиск в цикле может быть теоретически более быстрым, но это должно происходить довольно хорошо, поскольку ширина текста масштабируется приблизительно линейно с размером шрифта, и первый шаг до того, как цикл должен получить размер довольно близко.
Альтернативный подход, который прекрасно работает с изменениями размера представления, показан в этой теме .