TextView自动换行问题

目前采取的正确的换行方式:

 

添加箭头指向的那句话即可,原因是\\s表示 空格,回车,换行等空白符,但是TextView的默认自动换行属性breakStrategy只能识别空格,

导致出现了异常的换行情况,将字符串中出现的各种空白符都用" "代替,就可以变成属性breakStrategy能够识别的空格了,也就可以达到我们想要的自动换行的效果了。

 

以上方案会有一个问题,就是用户发送消息主动换行不起作用,暂时的解决方案是先将换行符用特殊字符串替换掉,之后再进行\\s的替换,最后再把特殊字符串更换为换行符,如下:

 

属性breakStrategy:

1.自 Andriod API 23(Android 6.0)起,TextView 新增了一个 breakStrategy 属性,这个属性用于控制将一段文本分割成多行时的折行策略,通俗的讲就是决定一行到底需要显示多少文本。

breakStrategy 既可以通过 TextView 的 xml 属性 android:breakStrategy设置,也可以通过 setBreakStrategy 方法来设置。可以设置的值只有三个,它们是 android.text.Layout 类的三个常量:

  • BREAK_STRATEGY_SIMPLE:对应 xml 属性 "simple"
  • BREAK_STRATEGY_HIGH_QUALITY:对应 xml 属性 "high_quality"
  • BREAK_STRATEGY_BALANCED :对应 xml 属性 "balanced"

2. 三种折行策略对比

2.1 BREAK_STRATEGY_SIMPLE

简单折行。这种策略会在每一行显示尽可能多的字符,直到这一行不能显示更多字符时才进行换行,同时这种策略下不会自动添加连词符(官方文档说,当一行只有一个单词并且宽度显示不下的情况下才会添加连词符,不过在测试过程中并没有看到连词符)。

在进行文本编辑时,后添加的文本不会影响前面文本的布局显示,比较适合可编辑的文本。EditText 默认的折行策略就是这种,因为可以避免在输入文本时由于布局刷新导致的字符跳动问题,保证用户的输入体验。

 

 

2.2 BREAK_STRATEGY_BALANCED

平衡折行。这个策略会尽可能保证一个段落的每一行的宽度相同,必要时会添加连词符。

 

 

2.3 BREAK_STRATEGY_HIGH_QUALITY

高质量折行。这个策略会针对整段文本的折行进行布局优化,必要时会自动添加连词符。和其他两种策略相比,这个策略会略微影响性能,并且需要更多时间进行文本布局。这个策略通常比较适合只读文本,TextView 的默认折行策略就是这种。

 

 

4. 低版本表现

由于 breakStrategy 这个属性在 API 23 才被添加进来,因此有必要了解在低版本时文本折行策略。这样当我们使用这个属性时,可以做到心中有数,尽量避免兼容性导致的体验问题。

先说结论,根据我(并不严谨)的测试,在低版本时 TextView 采用的折行策略是 simple。

测试过程:我使用了同一款机型的模拟器,一个运行系统版本为 19,一个运行系统版本为24,在显示内容相同的情况下,对比发现,低版本布局与高版本设置simple时的布局一致(这段文本在折行策略为balanced和high_quality时均表现为不同布局)。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HMP*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值