TextView:在省略号后添加文本或更改省略号字符

And*_*onu 6 android ellipsis textview

我想做什么

我正在尝试使用TextView

android:ellipsize="end"
android:maxLines="3"
Run Code Online (Sandbox Code Playgroud)

而不是"......"最后有一个"......显示更多".

我在哪里

如果TextView是单行,这将很容易,因为我可以使用2个TextViews,但我需要它有多行,"Show More"需要内联.

我一直在寻找一种方法来改变最后添加但无法找到任何内容的省略号字符.

我能想到的唯一解决方案是放弃自动省略号,测量文本并从代码中添加"...显示更多".

这个问题

有没有办法用自定义的内容替换Android添加的内容("...")?

Bir*_*dia 6

试试这种方式

创建这个功能

public  void makeTextViewResizable(final TextView tv, final int maxLine, final String expandText) {

        if (tv.getTag() == null) {
            tv.setTag(tv.getText());
        }
        ViewTreeObserver vto = tv.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

            @SuppressWarnings("deprecation")
            @Override
            public void onGlobalLayout() {

                ViewTreeObserver obs = tv.getViewTreeObserver();
                obs.removeGlobalOnLayoutListener(this);
                if (maxLine <= 0) {
                    int lineEndIndex = tv.getLayout().getLineEnd(0);
                    String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
                    tv.setText(text);
                } else if (tv.getLineCount() >= maxLine) {
                    int lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1);
                    String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
                    tv.setText(text);
                }
            }
        });

    }
Run Code Online (Sandbox Code Playgroud)

如何使用

这将在第4行末尾写"SeeMore"而不是"......"

makeTextViewResizable(tv, 4, "SeeMore");
Run Code Online (Sandbox Code Playgroud)

现在不需要在xml中编写这些行

android:ellipsize="end"
android:maxLines="3"
Run Code Online (Sandbox Code Playgroud)

  • 我将此标记为已接受的答案,因为它解决了问题,但对于登陆此页面的其他人:该解决方案不适用于带有跨度的文本(例如,如果您使用Html.fromHtml)并且文本位于ListView你可能会得到紧张的结果. (2认同)