特定のサイズのTextViewがあるとします (実際には問題ではありません... fill_parent、20dip など)。多くの計算を行わずに、使用可能なスペースに合わせてテキストのサイズを縮小/拡大するように指示することは可能ですか?
4 に答える
まあ、それは「多くの複雑な数学」よりも少し単純ですが、テキストの幅がテキストビューの幅からそれほど離れていない場合に機能する、これに使用するハックソリューションがあります。
// HACK to adjust text width
final int INITIAL_TEXTSIZE = 15;
final int TEXTVIEW_WIDTH = textviewBackground.getIntrinsicWidth(); // I use the background image to find the width, but you can use a fixed value or whatever other method you prefer.
final String text = ...;
textView.setText( text );
int size = INITIAL_TEXTSIZE;
while( textview.getPaint().measureText(text) > TEXTVIEW_WIDTH )
textview.setTextSize( --size );
テキストの幅がTextViewの幅と大幅に異なる可能性がある場合は、線形検索ではなくバイナリ検索を使用して適切なフォントサイズを見つける方がよい場合があります。
これが理想的な解決策であるとは言えませんが、テキストサイズを頻繁に調整する必要がない場合は便利な解決策です。テキストサイズを頻繁に調整する必要がある場合は、複雑な計算を行う方がよい場合があります。
上記のほとんどすべてを試しましたが、一番上のものを含めてほとんどが失敗しました。私が見つけた最も単純で最も効果的なのは emmby からのものでしたが、初期のテキストサイズを設定する必要があることがわかりました. これは、テキストサイズをまったく指定する必要がないところの改善です。
final String text = "HELP";
TextView tvFlash = (TextView) findViewById(R.id.tvFlash);
DisplayMetrics metrics = getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
tvFlash.setText(text);
tvFlash.setTextSize(TypedValue.COMPLEX_UNIT_PX, 1);
int size = 1;
do
{
float textWidth = tvFlash.getPaint().measureText(text);
if (textWidth < width)
tvFlash.setTextSize(++size);
else
{
tvFlash.setTextSize(--size);
break;
}
}while(true);
私が知っているわけではありません、ごめんなさい。
U は、TextView のアイデア フォント サイズの値を計算できます。それは大きすぎずにそれを埋めるフォントサイズです. 式は次のとおりです。
fontSize = (TextView Height) * (width DPI / height DPI) / (Screen Width * Screen Height);
幅と高さの DPI は、アクティビティで onConfigurationChanged メソッドをオーバーライドし、newConfig.screenWidthDp と newConfig.screenHeightDp を使用して取得できます。
ピクセル単位の画面サイズは、次のヘルパー関数を使用して取得できます
// Get Screen Size
static public Point getScreenSize(Activity aActivity)
{
Display display = aActivity.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
return size;
}
必要に応じて (onConfigurationChanged で) この値を計算し、静的ヘルパー クラスにプッシュします。次に、TextView が使用するフォント サイズを決定する必要がある場合、このクラスからそれを引き出します。
それは機能しますが、最も単純な解決策ではないかもしれません。