说我有一个 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需要确定什么字体大小的使用,它拉出来这个类的

它的工作原理,但可能不是简单的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top