【问题标题】:Scale text in a view to fit?在视图中缩放文本以适应?
【发布时间】:2011-11-07 17:03:09
【问题描述】:

我不相信这存在,但想仔细检查一下。我想设置 TextView 的文本大小,使其适合给定的宽度,单行。示例:

<LinearLayout
  layout_width="100dip"
  layout_height="50dip">

  <TextView
    layout_width="fill_parent"
    layout_height="wrap_content"
    textSize="fill" 
    text="fit me please!" />

</LinearLayout>

谢谢

【问题讨论】:

    标签: android resize textview


    【解决方案1】:

    您总是可以将xml布局定义与java结合起来,动态定义文本的大小。您可能需要一些计算和从 dip 单位到有关当前使用的屏幕的像素密度信息的参考,但是一旦完成,它几乎可以保证在所有情况下都能解决您的问题。

    【讨论】:

    • 嗨,是的,我已经写了一些东西来做这件事(它有点难看)希望更新版本的 SDK 可能会添加一个新标志来做同样的事情。
    【解决方案2】:

    您可以使用TextUtils.EllipsizeCallback。当文本被省略时,这个回调由 textview 完成。在这里您可以将文本大小设置为小于当前大小。

    编辑:否则你可以这样使用TextUtils.ellipsize

    while (mText != TextUtils.ellipsize(mText, textPaint, other params)) { 
        textpaint.setTextSize(textpaint.getTextSize() - 1);
    }
    

    【讨论】:

    • 小心.. 这是正确的想法,但 getTextSize() 返回 PX 而 setTextSize() 采用 DIP。你会不想把一个喂给另一个。跟踪自变量中的大小..
    • 我将文本大小设置为绘制对象而不是文本视图。当我找到合适的尺寸时,我才将它设置为 textview。所以我认为使用这个想法没有问题。
    • @userSevens7s 哦,继续!我第一次读的时候没有正确地读到我提到的愚蠢的陷阱。干杯。
    • @userSeven7s,我正在使用这种方法,我在以下设备中得到了java.lang.StackOverflowError:GT-I9192、D5803、API 4.2.2、4.4.4
    【解决方案3】:

    这个自定义函数应该可以做到,使用TextUtils.ellipsize ...

    public static void shrinkTextToFit(float availableWidth, TextView textView,
                                       float startingTextSize, float minimumTextSize) {
    
        CharSequence text = textView.getText();
        float textSize = startingTextSize;
        textView.setTextSize(startingTextSize);
        while (text != (TextUtils.ellipsize(text, textView.getPaint(),
                                            availableWidth, TextUtils.TruncateAt.END))) {
            textSize -= 1;
            if (textSize < minimumTextSize) {
                break;
            } else {
                textView.setTextSize(textSize);
            }
        }
    }
    

    【讨论】:

    • 我正在使用这种方法,并且在以下设备中得到java.lang.StackOverflowError:GT-I9192、D5803、API 4.2.2、4.4.4
    【解决方案4】:

    这是一个很好的自动适应文本的打包解决方案:https://github.com/grantland/android-autofittextview

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      相关资源
      最近更新 更多