美文网首页
[转]检测 TextView 是否因为设置 ellipsize

[转]检测 TextView 是否因为设置 ellipsize

作者: Thor_果冻 | 来源:发表于2019-01-03 15:17 被阅读0次

    原文:检测 TextView 是否因为设置 ellipsize 属性而显示省略号 · Issue #9 · maoruibin/maoruibin.github.com

    背景

    对于 TextView,在实际开发中,由于内容的不确定性,有时候文本内容会很长,这时我们会使用 ellipsize 属性进行省略号设置,ellipsize 有5个取值end,middle,marquee,none,start ,使用比较多的是end,这样只要设置 TextView 的 maxLines 属性后,当文本长度超出最长限制后,就会在结尾显示省略号,如果你想让省略号显示在最中间,就需要设置middle

    问题

    但是一些情况下,你需要在程序中检测这个 TextView 是否显示了省略号,比如超长显示后,给一个点击查看更多的 按钮之类的操作,那如何对 TextView 进行省略号检测呢?别说用

    TextView.getText().toString().endWith("...")
    
    

    这是肯定不行的。

    解决办法

    You can get the layout of the TextView and check the ellipsis count per line.

    通过 TextView 实例拿到对应的 Layout,然后使用 Layout 的 getEllipsisCount 方法查询到指定行中省略号的次数,如果你的 TextView 是单行,直接查询第 0 行,具体代码如下:

    Layout layout = textview.getLayout();
    if (layout != null) {
        int lines = l.getLineCount();
        if (lines > 0)
            if (layout.getEllipsisCount(lines-1) > 0)
                Log.d(TAG, "Text is ellipsized");
    }
    
    

    Note:你在使用上面的方法时,应该确保 TextView 已经渲染成功,为此,你最好给上述代码包一层,如下

    tvAreaName.post(new Runnable() {
                @Override
                public void run() {
                    Layout l = tvAreaName.getLayout();
                    if (l != null) {
                        if (l.getEllipsisCount(l.getLineCount()-1) > 0){
                            Log.d(TAG, "Text is ellipsized");
                        }else{
                            Log.d(TAG, "Text is not ellipsized");
                        }
                    }
                }
            });
    
    

    Good Luck

    参考链接

    android - How do I tell if my textview has been ellipsized? - Stack Overflow

    原文:检测 TextView 是否因为设置 ellipsize 属性而显示省略号 · Issue #9 · maoruibin/maoruibin.github.com

    相关文章

      网友评论

          本文标题:[转]检测 TextView 是否因为设置 ellipsize

          本文链接:https://www.haomeiwen.com/subject/xohplqtx.html