【发布时间】:2012-07-06 12:16:34
【问题描述】:
有没有办法知道多少个字体大小为 10sp 的字符可以放入一个固定宽度(比如 100dp)的 TextView 中?
我需要跟踪整个字符串是否适合(可见)预定义宽度的 TextView。
我无法找到一种方法来跟踪或计算这一点。
【问题讨论】:
有没有办法知道多少个字体大小为 10sp 的字符可以放入一个固定宽度(比如 100dp)的 TextView 中?
我需要跟踪整个字符串是否适合(可见)预定义宽度的 TextView。
我无法找到一种方法来跟踪或计算这一点。
【问题讨论】:
由于Android使用proportional fonts,每个字符占据不同的宽度。此外,如果您将kerning 考虑在内,则字符串的宽度可能会小于单个字符的宽度之和。
因此,最简单的方法是通过一次添加一个字符来测量整个字符串,直到 (a) 如果发现整个字符串符合限制,或者 (b) 字符串的宽度超过限制。
下面的代码展示了如何找到多少个大小为 11px 的字符适合 100px 宽的 TextView。 (您可以在网上找到转换 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));
如果性能不好,你可以尝试使用二分查找方法而不是线性循环。
【讨论】:
确定这一点的最佳方法就是对其进行测试。由于您使用的是 DP,它将相对独立于设备。除非您使用的是固定宽度字体,否则实际上没有办法在理论上确定它,除非您想实际尝试测量每个字母的宽度、字距调整等并与 TextView 的宽度进行比较
【讨论】: