您的位置:首页 > 其它

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

2017-10-13 12:00 393 查看
本文转载自: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”直接进行设置

出现过这个问题的朋友们可以试试这个方法。有更好的解决方法也请告知一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐