Android TextView与EditText超过限制长度显示省略号

分别针对TextView和EditView超过限制长度显示省略号给出解决方案

TextView设置单行并且设置maxEms,超过的部分显示end省略号.

有设置的是android:maxEms="5",这里的长度是指5个大写“M”的宽度,但是我测试中文汉字发现出现6个汉字之后才出现省略号,又或者是字体加粗之后,和没有加粗的情况下显示的汉字个数也是不一样的,对于要求比较高的设计师,怎么办呢?

解决方案如下:

在代码里面这样写:

textView.setSingleLine(true);

textView.setText(TextUtils.ellipsize(textToFill,textView.getPaint(),maxlength,TextUtils.TruncateAt.END);

textToFill:你要填充在textview的原始字符串

maxlength:你要设置多少字截断后面显示省略号,如大于10个字长后显示省略号

对于EditView设置单行和maxLength超出部分会发生截断,并不显示省略号,经测试发现设置单行和maxLength只会对editView的hint产生省略号的效果.那么这个问题怎么解决呢?

产品现在又要求超过给定长度,显示省略号,且省略号要文字的底部,如省略号...,正常情况下,我们知道省略号一般是在文字的中部展示,这个问题又怎么解决呢?

下面给出代码:

public static CharSequence ellipsize(String text, EditText editText, int maxLength) {
    CharSequence charSeq = "";
    if (!TextUtils.isEmpty(text)) {
        charSeq = TextUtils.ellipsize(text, editText.getPaint(), maxLength, TextUtils.TruncateAt.END);
        charSeq = TextUtils.replace(charSeq, new String[]{"\u2026"}, new String[]{"..."});
    }
    return charSeq;
}

说明:

1.参数editText可以换成TextView,EditView是TextView的子类

2.charSeq = TextUtils.ellipsize(text, editText.getPaint(), maxLength, TextUtils.TruncateAt.END); 可以实现省略号在文字中部显示,editView在文字中部显示省略号可以用这种方法

3.charSeq = TextUtils.replace(charSeq, new String[]{"\u2026"}, new String[]{"..."}); 可以实现省略号...

\u2026表示省略号,是Unicode的16进制表示,上面的意思是将"\u2026"代表的省略号用"..."代替,这样charSeq就是一个末尾是...的字符串了

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

这里再记录下:

\u0020的意思是表示空格,是unicode的16进制表示     

在XML中写字符串时,可能需要在字符串后面加空格,A_B(中间有空格的情况)是没有问题,用不到转义字符;
     但 是AB_ (后面有空格的)时候,就需要转个义。XML转义字符 ,\u0020写xml string的时候可能会用到 。

    Value\u0020;

 

参考博客:

https://blog.csdn.net/ouyang_peng/article/details/16856035?utm_source=copy

你可能感兴趣的:(Android TextView与EditText超过限制长度显示省略号)