分别针对TextView和EditView超过限制长度显示省略号给出解决方案
有设置的是android:maxEms="5",这里的长度是指5个大写“M”的宽度,但是我测试中文汉字发现出现6个汉字之后才出现省略号,又或者是字体加粗之后,和没有加粗的情况下显示的汉字个数也是不一样的,对于要求比较高的设计师,怎么办呢?
解决方案如下:
在代码里面这样写:
textView.setSingleLine(true);
textView.setText(TextUtils.ellipsize(textToFill,textView.getPaint(),maxlength,TextUtils.TruncateAt.END);
textToFill:你要填充在textview的原始字符串
maxlength:你要设置多少字截断后面显示省略号,如大于10个字长后显示省略号
产品现在又要求超过给定长度,显示省略号,且省略号要文字的底部,如省略号...,正常情况下,我们知道省略号一般是在文字的中部展示,这个问题又怎么解决呢?
下面给出代码:
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的时候可能会用到 。
参考博客:
https://blog.csdn.net/ouyang_peng/article/details/16856035?utm_source=copy