如何在Android TextView中使用自定义省略号 [英] How to use custom ellipsis in Android TextView

查看:686
本文介绍了如何在Android TextView中使用自定义省略号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个maxlines = 3的TextView,我想用自己的省略号代替

I have a TextView with maxlines=3 and I would like to use my own ellipsis, instead of

"Lore ipsum ..."

我需要

"Lore ipsum ... [See more]"

为了向用户提供线索,即单击视图将展开全文.

in order to give the user a clue that clicking on the view is going to expand the full text.

有可能吗?

我当时正在考虑检查TextView是否具有省略号,在这种情况下,请在之前添加文本"[查看更多]"并在其后设置省略号,但是我找不到解决方法.

I was thinking about check whether TextView has ellipsis and in such a case add the text "[See more]" and after that set ellipsis just before, but I couldn't find the way to do that.

也许,如果我找到要剪切文本的位置,则可以禁用省略号并创建子字符串,然后添加"... [查看更多]",但是同样,我也不知道如何获得该位置.

Maybe if I find the position where the text is cutted, I can disable the ellipsis and make a substring and later add "... [See more]", but again I dont know how to get that position.

推荐答案

我终于以这种方式进行了管理(可能不是最好的方法):

I've finally managed it in this way (may be not the best one):

private void setLabelAfterEllipsis(TextView textView, int labelId, int maxLines){

    if(textView.getLayout().getEllipsisCount(maxLines-1)==0) {
        return; // Nothing to do
    }

    int start = textView.getLayout().getLineStart(0);
    int end = textView.getLayout().getLineEnd(textView.getLineCount() - 1);
    String displayed = textView.getText().toString().substring(start, end);
    int displayedWidth = getTextWidth(displayed, textView.getTextSize());

    String strLabel = textView.getContext().getResources().getString(labelId);
    String ellipsis = "...";
    String suffix = ellipsis + strLabel;

    int textWidth;
    String newText = displayed;
    textWidth = getTextWidth(newText + suffix, textView.getTextSize());

    while(textWidth>displayedWidth){
        newText = newText.substring(0, newText.length()-1).trim();
        textWidth = getTextWidth(newText + suffix, textView.getTextSize());
    }

    textView.setText(newText + suffix);
}

private int getTextWidth(String text, float textSize){
    Rect bounds = new Rect();
    Paint paint = new Paint();
    paint.setTextSize(textSize);
    paint.getTextBounds(text, 0, text.length(), bounds);

    int width = (int) Math.ceil( bounds.width());
    return width;
}

这篇关于如何在Android TextView中使用自定义省略号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆