android - 计算 Spannable String 宽度

标签 android textview

我正在运行时构建一个将放入 TextView 中的文本。 此文本由不同大小的字体组成。 我必须计算此文本的宽度(以像素为单位)。 我曾尝试使用 Paint.measureText,但它没有考虑不同的字体大小。 如何计算实际宽度?

这是一个例子:

LinearLayout text = (LinearLayout) findViewById(R.id.LinearLayout);

SpannableStringBuilder str = new SpannableStringBuilder("0123456789");
str.setSpan(new RelativeSizeSpan(2f), 3, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView tmp = new TextView(this);
tmp.setText(str,BufferType.SPANNABLE);
text.addView(tmp);

Float dim = tmp.getPaint().measureText(str, 0, str.length());

在此示例中,如果我将相对大小设置为“2f”或“3f”(例如),则返回“MeasureText”的总大小相同。

谢谢

最佳答案

您可以使用 staticLayout.getLineWidth(line) 来计算 SpannableString 的宽度。例如:

CharSequence boldText = Html.fromHtml("<b>ABCDEFG</b>HIJK");
TextPaint paint = new TextPaint();

float measureTextWidth = paint.measureText(boldText, 0 , boldText.length());

StaticLayout tempLayout = new StaticLayout(boldText, paint, 10000, android.text.Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false);
int lineCount = tempLayout.getLineCount();
float textWidth =0;
for(int i=0 ; i < lineCount ; i++){
    textWidth += tempLayout.getLineWidth(i);
}

结果:

measureTextWidth = 71.0
textWidth = 77.0

粗体字更宽。

关于android - 计算 Spannable String 宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4245809/

相关文章:

android - Linkify Android 转换问题

android - 如果 textview 到达我包含的布局 Android 中的 View ,它应该滚动

java - 如何删除 TextView 中两个相同字符串值之一?

android - 在 ListView 中创建数组

java - 如何创建和写入 Excel 文件 (.xlsx)?

android - colorPrimary 和 colorPrimaryDark 在应用程序主题中被忽略

android - 导入 Android 精选照片

具有多行的Android TextView

android - 在 Android 中的 TextView 下方绘制下划线

java - Android 是否允许后台应用程序在正在运行的应用程序上打开 View ?