在TextView中调整文字大小的比例

12

假设我有一个特定大小的TextView(实际上并不重要,可以是fill_parent、20dip或任何其他尺寸),是否有可能让文本根据可用空间自动收缩/增大以适应呢?而不需要进行很多数学计算。


请在此处查看答案,它运行得非常好:输入链接说明 - AllDayAmazing
4个回答

18

嗯,这比“很多复杂的数学”简单一些,但我有一个可行的黑科技解决方案,如果你的文本宽度与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的宽度相差较大,最好使用二分查找来找到正确的字体大小。

并不是说这是一个理想的解决方案,但如果您不经常需要调整文本大小,这是一个便捷的解决方法。如果您需要频繁调整文本大小,则最好进行一些复杂的数学计算。


2

我尝试了以上几乎所有的方法,包括排名第一的。大多数都失败了。最简单且最有效果的方法是来自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);

0

很抱歉,我不知道有这样的情况。


0

你可以计算TextView的理想字体大小值。这是填充它而不会太大的字体大小。公式如下:

fontSize = (TextView Height) * (width DPI / height DPI) / (Screen Width * Screen Height);

通过覆盖Activity中的onConfigurationChanged方法,并使用newConfig.screenWidthDp和newConfig.screenHeightDp,可以获取宽度和高度DPI。

可以使用以下辅助函数获取像素屏幕尺寸

// 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需要确定使用什么字体大小时,它会从该类中取出它。
它有效,但可能不是最简单的解决方案。

无用的。不考虑字符长度。 - Johann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接