Android中TextView设置文本或富文本的时候出现没有到头就换行的问题.

网上有很多相关内容. 但大多都是关于文本换行的情况, 对于有富文本内容的情况, 如设置Spanned对象的内容, 会出现颜色等内容丢失的情况.  在此基础上添加富文本内容的处理.  之前代码不知道原出处在哪, 在此借用一下.

如图显示内容:

废话少说, 上菜~~~~~~

1.对TextView进行监听.

private void initAutoSplitTextView() {mContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {mContent.getViewTreeObserver().removeOnGlobalLayoutListener(this);final CharSequence newText = autoSplitText(mContent);if (!TextUtils.isEmpty(newText)) {mContent.setText(newText);}}});}

2.对TextView显示内容的拆分.

//返回CharSequence对象
private CharSequence autoSplitText(final TextView tv) {//tv.getText(), 原始的CharSequence内容.CharSequence charSequence = tv.getText();final String rawText = tv.getText().toString(); //原始文本final Paint tvPaint = tv.getPaint(); //paint,包含字体等信息final float tvWidth = tv.getWidth() - tv.getPaddingLeft() - tv.getPaddingRight(); //控件可用宽度//将原始文本按行拆分String[] rawTextLines = rawText.replaceAll("\r", "").split("\n");StringBuilder sbNewText = new StringBuilder();for (String rawTextLine : rawTextLines) {if (tvPaint.measureText(rawTextLine) <= tvWidth) {//如果整行宽度在控件可用宽度之内,就不处理了sbNewText.append(rawTextLine);} else {//如果整行宽度超过控件可用宽度,则按字符测量,在超过可用宽度的前一个字符处手动换行float lineWidth = 0;for (int cnt = 0; cnt != rawTextLine.length(); ++cnt) {char ch = rawTextLine.charAt(cnt);lineWidth += tvPaint.measureText(String.valueOf(ch));if (lineWidth <= tvWidth) {sbNewText.append(ch);} else {sbNewText.append("\n");lineWidth = 0;--cnt;}}}sbNewText.append("\n");}//把结尾多余的\n去掉if (!rawText.endsWith("\n")) {sbNewText.deleteCharAt(sbNewText.length() - 1);}//对于有富文本的情况if (charSequence instanceof Spanned) {SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(charSequence);if (sbNewText.toString().contains("\n")) {String[] split = sbNewText.toString().split("\n");int tempIndex = 0;for (int i = 0; i < split.length; i++) {if (i != split.length - 1) {String s = split[i];tempIndex = tempIndex + s.length() + i;spannableStringBuilder.insert(tempIndex, "\n");}}}return spannableStringBuilder;} else {return sbNewText;}}

随手Mark, 如有问题留言一块探讨.

Android中TextView文本或富文本内容自行换行的问题相关推荐

  1. cef在android中使用_关于富文本在Android中的应用以及遇到的坑

    富文本可以为用户提供更加多样化的文本展示形式,但由于其使用了H5标签的特殊性,一般都需要第三方框架的支持.这里推荐一款合适的第三方富文本框架,richeditor. 首先我们要使用该功能需要引入相关j ...

  2. android动态添加圆,Android开发中TextView 实现右上角跟随文本动态追加圆形红点

    在一个比较坑的需求里,一段文字右上角需要追加一个圆形红点.最右侧有个金额,红点动态随着文字移动,然后各种摆布局,一下午坑死我了.后来果断放弃.然后就想试试直接自定义view来实现这个需求. 最坑的就是 ...

  3. edui 富文本编辑_React中使用UEditor百度富文本的方法

    前言 本文将介绍笔者在React的项目中使用百度的富文本编辑器Ueditor的过程.注意本文不提供一条龙式的使用方法,只是将使用过程中的一些实现思路进行总结,供以参考.react项目中导入uedito ...

  4. vue中引入TinyMCE实现富文本编辑器

    整片文章是以vue2.X 引入tinymce富文本编译器 首先,先确认你的vue版本是 2 还是 3 ,查看项目的package.json中vue的版本,我的是2.5.2 一共两个步骤 vue工程中安 ...

  5. 使用UIWebView中html标签显示富文本

    使用UIWebView中html标签显示富文本 用UIWebView来渲染文本并期望达到富文本的效果开销很大哦! Work 本人此处直接加载自定义字体"新蒂小丸子体",源码不公开, ...

  6. html加载富文本_富文本图片懒加载解决方案

    图片懒加载,作为性能优化的一部分,想必我们并不陌生. 在React.Vue项目中,我们都可以引入对应的NPM包处理图片懒加载,如 lazyload.react-lazyload.vue-lazyloa ...

  7. 初探富文本之富文本概述

    初探富文本之富文本概述 富文本编辑器通常指的是可以对文字.图片等进行编辑的产品,具有所见即所得的能力.对于Input.Textarea之类标签,他们是支持内容编辑的,但并不支持带格式的文本或者是图片的 ...

  8. Android中TextView加横线的属性

    textView.getPaint().setAntiAlias(true); // 抗锯齿textview.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FL ...

  9. android中TextView中文字体粗体的方法 (android:textStyle=bold)

    android中TextView中文字体粗体的方法 (android:textStyle="bold"来使字体显示为粗体,但是这只对英文有效) TextView在xml中可以定义a ...

最新文章

  1. WPF线性渐变画刷应用之——炫彩线条
  2. php sql alert,SQL ALTER
  3. Google Protocol Buffer 简单介绍
  4. python爬虫高考成绩
  5. 网易邮箱开通imap服务器,网易邮箱率先全面默认开通IMAP服务
  6. 【SSL】java keytool工具创建自己的(localhost)(JKS)证书库
  7. java手写实现BST
  8. C++ C# 中作用域限定符
  9. id长度 雪花算法_分布式系统中唯一ID算法之雪花算法
  10. 学计算机的大1新生规划,大学生学习计划怎么写
  11. sai2笔刷_SAI如何安装笔刷?板绘萌新必备
  12. 【转】GIS原理学习
  13. html/jsp如何固定图像的大小
  14. 基于matlab的信号与系统实验,基于MATLAB的《信号与系统》实验系统
  15. jQuery- 跟着李南江学编程
  16. 性能优化-图片压缩格式的选择(ETC和ASTC)
  17. prometheus定义counter指标
  18. 用函数计算两数之和和两数之积
  19. Wireshark网络安全之传输层安全-UDP泛洪(UDP Flood)
  20. Deep Learning Based Registration文章阅读(五)《Anatomy-guided Multimodal Registration by Learning Segment 》

热门文章

  1. MyZip pro专业极速解压放弃了Mac上落后的拖拽解压压缩模式,采用『右键菜单』进行压缩、解压,极大的符合了用户最初的使用习惯。
  2. STM32F103+ADC采集实时电压+LCD1602A显示
  3. 帮我写基于matlab的风光互补发电系统代码
  4. 惠普linux下做w7,惠普u盘安装w7系统安装教程【图文步骤】
  5. linux 怎么卸载gnome-screenshot,如何更改gnome-screenshot截图的默认名称?
  6. Excel到R中的日期转换
  7. flutter jsonEncode和jsonDecode,sharedpreferences存model数据
  8. 安卓配置多渠道包error:All flavors must now belong to a named flavor dimension
  9. Android仿微信选择图片
  10. c语言超市货架管理设计报告,商品货架管理详解.doc