Android: масштаб текста до максимально возможного без переноса - PullRequest
2 голосов
/ 01 января 2012

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

Возможно ли это?

Спасибо

1 Ответ

2 голосов
/ 01 января 2012

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

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

Альтернативный подход, который прекрасно работает с изменениями размера представления, показан в этой теме .

...