7

有没有办法知道有多少字体大小为 10sp 的字符可以放入固定宽度的 TextView(比如说 100dp)?

我需要跟踪整个字符串是否适合(可见)到预定义宽度的 TextView 中。

我一直无法找到一种方法来跟踪或计算这一点。

4

2 回答 2

9

由于 Android 使用比例字体,每个字符占据不同的宽度。此外,如果您考虑字距调整,则字符串的宽度可能比单个字符的宽度之和短。

因此,最简单的方法是通过一次添加一个字符来测量整个字符串,直到 (a) 如果发现整个字符串符合限制,或者 (b) 字符串的宽度超过限制。

下面的代码展示了如何找出多少个大小为 11px 的字符适合 100px 宽的 TextView。(您可以在 Web 上找到在 px 和 dp 之间转换的公式)。

我们将通过measureText(String text, int start, int end)在循环中使用递增的值来完成它,end直到它不再适合TextView' 的宽度。

String text = "This is my string";
int textViewWidth = 100;
int numChars;

Paint paint = textView.getPaint();
for (numChars = 1; numChars <= text.length; ++numChars) {
    if (paint.measureText(text, 0, numChars) > textViewWidth) {
        break;
    }
}

Log.d("tag", "Number of characters that fit = " + (numChars - 1));

如果性能较差,您可以尝试使用二分搜索方法而不是线性循环。

于 2012-07-05T15:16:47.840 回答
0

确定这一点的最佳方法就是对其进行测试。由于您使用的是 DP,它将相对独立于设备。除非您使用的是固定宽度的字体,否则实际上没有办法在理论上确定它,除非您想实际尝试测量每个字母的宽度、字距调整等并与 TextView 的宽度进行比较

于 2012-07-05T15:00:53.700 回答