【问题标题】:Can I know how many characters can fit into TextView of X dp width?我能知道 X dp 宽度的 TextView 可以容纳多少个字符吗?
【发布时间】:2012-07-06 12:16:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: android textview


    【解决方案1】:

    由于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));
    

    如果性能不好,你可以尝试使用二分查找方法而不是线性循环。

    【讨论】:

    • 我怎么知道有多少大小为 11dp 的字符(如果需要,我可以使用 px 或 pt 值)适合 TextView 100dp 宽?
    【解决方案2】:

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

    【讨论】:

    • 无法测试。文本通过提要传递并显示。有时它有 20 个字符,有时是 120 个字符。我需要检测溢出长度,以便减小字体大小。
    • 不应该自动换行吗?
    • 如果我设置只有 4 行可见。不适合的文本将在字符串中不可见,长度超过 4 行 100dp 宽度。
    • 好的,假设您可以检查并减小文本大小以使其适合。如果你得到 500 个字符会怎样?您的文字会变得很小,无法阅读。更好的解决方案可能是只显示前 X 个字符,然后用省略号 (...) 表示还有其他未显示的文本。
    • 它永远不会占用这么多字符。在最大字符时,它通常缺少大约 5 个字符。并且不可能省略这5个。当前版本根本没有显示它们,但我认为有一种方法可以显示它们
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2011-10-10
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多