解决办法

使用replaceAll("\\s", " ")过滤掉各种空白符即可实现目的。

原因

\\s表示 空格,回车,换行等空白符,但是TextView的默认自动换行属性breakStrategy只能识别空格,

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

补充技术

属性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 的默认折行策略就是这种。

最后给一个自定义的TextView

public class TextViewNoFoldView extends androidx.appcompat.widget.AppCompatTextView {public TextViewNoFoldView(@NonNull Context context) {
super(context);
}public TextViewNoFoldView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}public TextViewNoFoldView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}@Override
public void setText(CharSequence text, BufferType type) {
if (!TextUtils.isEmpty(text)) {
text = text.toString().replaceAll("\\s", " ");
}
super.setText(text, type);
}
}

TextView 显示出现单词折行问题相关推荐

  1. CSS 单词折行 word-wrap属性

    word-wrap属性用来设置是否允许长单词或 URL 地址在容器的边界处自动换行,取值为 normal | break-word,默认值为 normal. normal 表示只允许在半角空格或连字符 ...

  2. 文本超出显示省略号/数字英文字母折行有关css 属性/显示两行,第二行省略号显示css方法...

    文本超出显示省略号: 定容器宽度 overflow: hidden; text-overflow: ellipsis; 文本超出显示省略号 white-space:nowrap;  强制文本不换行 折 ...

  3. html中,纯数字或纯英文的一串字符超出父容器不会折行显示,如何解决?

    这种情况在软件使用过程中一般不会出现,只有测试人员在测试的时候手比较贱会给你弄一个这种数据,当然这也算是bug吧. 如图:"经营范围"的值严重超出父容器长度,并且没有像" ...

  4. 前端,整行英文单词超出范围,单词完整折行

    前端,整行英文单词超出范围,单词完整折行 word-wrap指内容要超出该行范围时,具体如何换行. white-space: nowrap; 规定段落中的文本不进行换行 word-wrap指内容要超出 ...

  5. 下拉框文本过长折行显示

    下拉筛选框的下拉选择项有字数很长的情况,实现当字数过长时,文本折行显示 vue项目中使用elmentui的下拉框组件.但是下拉框的样式,不在el-select的DOM里面,而是放在了最外层.直接修改下 ...

  6. td 属性 noWrap 防止折行、撑开(及其它文字换行问题)

    td 属性 noWrap 防止折行.撑开(及其它文字换行问题) 我用为td中noWrap属性来防止td数据折行 <td class="text_left" noWrap=&q ...

  7. linux vim自动换行,VIM 的自动换行及自动折行设置

    VIM 的自动换行及自动折行设置 以 .vimrc 文件中的设置为例: " 自动换行是每行超过 n 个字的时候 vim 自动加上换行符 " 需要注意的是,如果一个段落的首个单词很长 ...

  8. c语言向表格内存入数据,怎么实现横向到存入多个单元格,在列数固定的报表中逐格横向填充数据并折行...

    在很多需要打印的报表中,受限于纸张的大小,往往会限制行数或者固定列数.我们在<单据类报表的制作>一文中,曾经介绍了限制了行数的情况如何实现,现在,我们再来看一下,在固定了列数的情况下,如果 ...

  9. 014_html折行

    1. 如果您希望在不产生一个新段落的情况下进行换行(新行), 请使用<br />标签. 2. <br />元素是一个空的html元素. 3. <br>还是<b ...

最新文章

  1. 深度学习巨头Yoshua Bengio清华演讲: 深度学习通往人类水平人工智能的挑战
  2. 在php.ini中safe_mode开启之后对于PHP系统函数有什么影响呢?
  3. 外包物料成本核算时的供应商确定
  4. OpenGL 显示多个外星人实例
  5. Windows 10 LTSB
  6. 两个sql交集_如何使用性能分析工具定位SQL执行慢的原因?
  7. ios34---GDC,dispatch_once
  8. vue如何和PHP交互,VUE中如何使用Vue-resource完成交互
  9. gba徽章机器人_《徽章机器人》倒计时网站开启 20周年纪念插画欣赏
  10. Q126:PBRT-V3,VolPathIntegrator(体渲染)流程概述
  11. 手机团购,团购市场的下一引爆点
  12. Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!
  13. vasp程序对计算机的要求,OpenMPI环境下的VASP软件的并行与进程
  14. linux安装网易云
  15. 网页数据提取----网络投票软件开发
  16. 2018最新win10激活密匙
  17. dell r730服务器开启虚拟化,r730服务器不能开启虚拟化(dell开启cpu虚拟化)
  18. 常见编程语言对REPL支持情况小结[转]
  19. python学习之 利用蒙特卡洛方法计算PI值
  20. element UI和阿里图标图iconfont冲突怎么办

热门文章

  1. 考川大计算机硕士选专硕还是学硕好,考川大的财经学硕好还是西财的金融专硕好啊?......
  2. 字节跳动面试,两面+HR面,面试官很棒!
  3. PostGIS 查询某点周围指定范围内的兴趣点
  4. C++字符串常量定义方式选择
  5. VMware 虚拟机 无法打开配置文件
  6. 使用R语言对股票数据进行时间序列分析
  7. 简易TCP服务器搭建
  8. 关于 UI设计 切图,我们应该如何给开发人员
  9. 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)
  10. 记录java中两个可能导致安全问题的代码