关于android textview 中英文混合分行错误问题

来源:互联网 发布:python控制树莓派gpio 编辑:程序博客网 时间:2024/06/13 18:16

在中文英文混合时候textview 的分行就出现了错误

比如这样的字符串:宁静致远: adhadjjlskjlhfajfoiweuiddncxcnxchiosafjionjfdhvwureighbv cn vcvhtubfvcx,zjcxljclvhsdhfb 就出现了 问题 如下:



这里用 StaticLayout 来计算分行情况 计算的不对,打印如下:


说明Android 的分行计算方式出现了问题这里找到了一点资料:

http://blog.iamzsx.me/show.html?id=150001

但是在IOS 系统下就label中有 lb.lineBreakMode = NSLineBreakByCharWrapping; 这样的按字符来分行才能填充满每一行.

Android需要在API 23 以上才有IOS 这样的参数,具体代码如下

StaticLayout.Builder builder = StaticLayout.Builder.obtain(msg,0,msg.length(),tv.getPaint(),width);        builder.setBreakStrategy(StaticLayout.BREAK_STRATEGY_BALANCED);        StaticLayout staticLayout = builder.build();


在API23 Textview新增加了 参数:

可以设置Textview的内容对齐边界.


另外 利用Paint 来计算文字长度,

int line2length = tv.getPaint().breakText(msg,line1length,msg.length(),true,width,null);

但是只支持纯文字,不支持spannerable的文字,源码中直接把spannerable 转成string了:


而且在测量时候也不支持 spannerable 的测量..



参考:

http://tieba.baidu.com/p/4106306931

http://mikewang.blog.51cto.com/3826268/871765

http://www.eoeandroid.com/blog-578780-22865.html

https://developer.android.com/reference/android/text/StaticLayout.Builder.html




0 0