Я не могу попробовать эту идею сейчас, но давайте попробуем! В соответствии с этот пост вы можете использовать следующий метод, чтобы узнать, подходит ли строка в текстовом представлении.
private boolean isTooLarge (TextView text, String newText) {
float textWidth = text.getPaint().measureText(newText);
return (textWidth >= text.getMeasuredWidth ());
}
Итак, одна идея, если текст всегда один и тот же, вы можете определить начальные значения для каждого текстового представления вручную, а затем, когда вы увеличиваете или уменьшаете шрифт, вы пересчитываете его, удаляя или добавляя слова.
Если нет возможности ввести начальные значения вручную, вы можете сделать что-то вроде:
String wordsInTextview = new String();
int lastUsedWord= 0;
int totalNumberOfWords = text.size();
for (int i=lastUsedWord;i<totalNumberOfWords;i++) {
if !(isTooLarge(TextView,wordsInTextview)) {
wordsInTextview = wordsInTextview + text(i); // add the words to be shown
} else {
TextView.setText(wordsInTextView);
lastUsedWord= i;
wordsInTextView = new String(); // no idea if this will erase the textView but shouldn't be hard to fix
}
}
Вам также нужно будет сохранить позицию первого слова textView, поэтому, когда вы изменяете размер текста, вы знаете, с чего начать!
int firstWordOnTextView = TextView.getText().toString().split(" ")[0]
И когда он изменяет размер, вы используете его тем же методом для вычисления текста на экране.
lastUsedWord = firstWordOnTextView;
Если вы хотите быть еще быстрее, вы можете отслеживать, сколько слов у вас есть на каждой странице, сделать среднее значение и после нескольких прогонов всегда статистику вашего цикла оттуда. Или несколько слов раньше, чтобы не повторяться.
Я считаю это разумным решением, если вам не нужно отображать слишком много страниц одновременно!
Извините за ошибки в коде, сейчас негде попробовать! Есть комментарии по поводу этого решения? Очень интересный вопрос!
person
caiocpricci2
schedule
09.05.2012