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

在处理Android TextView中中文和英文混合的分行问题时,发现TextView的默认分行计算存在误差。通过查阅资料,了解到在iOS系统中,可以使用类似`NSLineBreakByCharWrapping`的策略,但在Android API 23及以上版本才有相应参数实现。为解决此问题,可以尝试设置TextView内容对齐边界,或者利用Paint计算文字长度,但需要注意Paint不支持Spannable文字的测量。相关链接提供了更多解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在中文英文混合时候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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值