关于Textview maxline=1 ellipsize="end" 导致中英文数字混合分割错误的问题

来源:互联网 发布:淘宝新店搜索软件 编辑:程序博客网 时间:2024/05/22 01:55

本文转载自:http://blog.csdn.net/lhj_android/article/details/78143383

本文纯为记录

出现错误的现象 
我想让textview显示:你好啊430000000呵呵呵呵呵呵呵赫尔呵呵. 由于我设置了maxline=1 ellipsize=”end” 在Textview宽度不够的时候应该显示成 
你好啊430000000呵呵呵呵呵呵呵…(理想的显示) 
结果在一些手机上 特别是5.0以下的手机 显示成 
你好啊… 
当时想着这么会出现这个情况呢 于是我上网上搜索了下 比较靠谱的说法是 当你设置ellipsize=”end” 这个属性时 textview会检测你的文字应该在那截断

****textview的折行包含以下规律: 
1、半角字符与全角字符混乱所致:这种情况一般就是汉字与数字、英文字母混用。 
2、TextView在显示中文的时候标点符号不能显示在一行的行首和行尾,如果一个标点符号刚好在一行的行尾,该标点符号就会连同前一个字符跳到下一行显示。 
3、一个英文单词不能被显示在两行中( TextView在显示英文时,标点符号是可以放在行尾的,但英文单词也不能分开 )。**

网上试了很多方法 一种说是把文字全部转成全角(这样做不好看 看着很别扭) 
还有的说重写textview

然后我想着既然系统截取单词判断出现了错误 那我就自己来截取合适的文字长度设置给textview不就行了。于是我就尝试着自己截取。所以我想到是看看系统提供的TextUtils有没有这样的方法 结果里面还真有。于是我调用了 
(String) TextUtils.ellipsize(str,tv1.getPaint(),dp2px(120), TextUtils.TruncateAt.END); 
第一个参数是: 想要设置给textview的文本内容 
第二个参数是: textview的paint系统会用这个paint那测量文字有多长 
第三个参数是: textview的宽度 这个宽度一般都能通过布局拿到 根据求取屏幕宽度 减去它左边和右边的布局就能知道多宽了 
地四个阐述是: 截断方式 
返回值: 系统根据textview的paint和textview宽度 返回一个正确的截断字符串 
然后试了一下问题解决了 
显示为 
你好啊43000000…


第二种方法 还可以用SingleLine=“true”直接进行设置

出现过这个问题的朋友们可以试试这个方法。有更好的解决方法也请告知一下

阅读全文
0 0