2012-01-01 2 views
1

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

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

Благодаря

ответ

2

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

+0

Спасибо за ваш ответ. Мои знания ограничены, и я не совсем понимаю, как это работает или как его реализовать. Если длина строки длинной строки имеет разрывы строк, она учитывает их? Работает ли этот код для горизонтального масштабирования? – Lorof

+0

@Lorenz - Это работает путем измерения горизонтальной протяженности текста при различных размерах шрифта и масштабирования размера, чтобы размер не превышал доступную ширину. Я не уверен, что он учитывает разрывы строк; что будет зависеть от того, как «Paint.measureText» обрабатывает разрывы строк при измерении текста. Все, что я могу предложить, это попробовать, или просто прокормить его самой длинной сплошной линией. –

+0

Извините, еще несколько вопросов. Я использую setBestTextSize() вместо setTextSize()? Как мне найти таргетинг, потому что некоторые телефоны сообщают об этом значении неправильно (или так я слышал). Как инициализировать Paint и что мне вводить в качестве последнего аргумента в void? Извините, что я попробовал поиск по Google, но я все еще очень новичок в программировании ... Еще раз спасибо – Lorof