题
说我有一个 TextView的特定大小的(没有按”吨真的不管是什么... FILL_PARENT,20dip,等等)。是否可以告诉文本缩小/生长在大小以适合可用空间没有做大量的数学吗?
解决方案
这并不是说我知道,抱歉。
其他提示
嗯,这是不是“有很多复杂的数学”稍微简单一些,但有这种黑客攻击解决方案,我用这是可行的,如果你的文本的宽度是不是太远了,从你的TextView的宽度。
// 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的宽度显著不同,它可能是更好的使用二进制搜索,而不是线性搜索找到合适的字体大小。
不是说这是一个理想的解决方案,但它是,如果你不经常需要调整您的TEXTSIZE权宜之计之一。如果您需要经常调整TEXTSIZE,它可能会更好做一些复杂的数学。
我尝试了几乎所有的上述和最失败包括最上面的一个的。最简单,最有效的,我发现是从emmby却发现,你必须设置初始TEXTSIZE。在这里你不需要在所有指定任何TEXTSIZE他改进:
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需要确定什么字体大小的使用,它拉出来这个类的
它的工作原理,但可能不是简单的解决方案。
不隶属于 StackOverflow