今はこのアイデアを試すことはできませんが、試してみましょう。この投稿によると、次の方法を使用して、文字列がテキストビューに収まるかどうかを確認できます。
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;
さらに速くしたい場合は、各ページにある単語の数を追跡し、平均を作成し、数回実行した後は常にそこからループを統計することができます。または、前に数回繰り返す必要がないようにします。
一度に多くのページを表示する必要がない場合、これは合理的な解決策だと思います。
コードの間違いで申し訳ありませんが、今はどこで試すことができません!このソリューションについて何かコメントはありますか?非常に興味深い質問です!