多くの詩/詩を表示するアプリをプログラミングしていますので、テキストの折り返しは私の選択肢ではありません。私はテキストをできるだけ大きくしたい(新しいテキストが表示されるたびに再計算する必要はなく、最大のテキストが画面に収まるようにするだけでよい)、画面サイズを拡張しないでください。視覚的に拡大縮小したり、テキストが表示されるのに時間がかかりません。Android:ラップなしでテキストを最大に拡大
これは可能ですか?
おかげ
多くの詩/詩を表示するアプリをプログラミングしていますので、テキストの折り返しは私の選択肢ではありません。私はテキストをできるだけ大きくしたい(新しいテキストが表示されるたびに再計算する必要はなく、最大のテキストが画面に収まるようにするだけでよい)、画面サイズを拡張しないでください。視覚的に拡大縮小したり、テキストが表示されるのに時間がかかりません。Android:ラップなしでテキストを最大に拡大
これは可能ですか?
おかげ
私はあなたが収まるように必要な最大のテキストを使用して最高のポイントサイズのための簡単な検索をお勧めします。これは始動時に一度行うことができます。 (まあ、風景の場合は2度、肖像画の場合は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です。
あなたの答えをありがとう。私の知識は限られており、この仕組みや実装方法を理解できていません。 longesttext文字列に改行がある場合は、それを考慮しますか?このコードは水平方向のスケーリングのために機能しますか? – Lorof
@Lorenz - これは、さまざまなフォントサイズでのテキストの水平範囲を測定し、エクステントが使用可能な幅より大きくないようにサイズを調整することによって機能します。改行を考慮しているかどうかはわかりません。これは、テキストを測定するときに 'Paint.measureText'が改行を処理する方法に依存します。私はそれを試してみることを提案することができます、またはそれだけでそれを最長の破られていないラインに供給してください。 –
ごめんなさい。 setTextSize()の代わりにsetBestTextSize()を使用しますか?一部の電話機でこの値が間違っていると報告されたり(または聞いたため)、どのように幅を見つけることができますか。ペイントを初期化するにはどうすればいいですか?ボイドの最後の引数として何を入力しますか?申し訳ありませんが、私はグーグルを試みましたが、私はまだ非常にプログラミングに新しいです...ありがとうございました – Lorof