使用TextView时会经常出现以下现象:

1、当遇到标点符号时,经常出现自动标点符号加上前面的一个汉字换到下一行,导致当前行出现缺一块的现象

2、当遇到英文时如果一行展示不下就自动换到下一行,排版参差不齐


下面方法实现了主动控制排版,实现了每行都显示满在换行,遇到英文也是可以把一个单词拆开换行,当需要设置文本时,调用此方法即可。

   /*** 通过自动换行的方式设置文本 优化排版* @param tv 要设置文本的文本控件* @param text 要设置的文本内容*/private void setAutoSplitText(TextView tv,String text){tv.setText(text);tv.getViewTreeObserver().addOnGlobalLayoutListener(new OnTvGlobalLayoutListener(tv));}

onTvGlobalLayoutListener 类如下:


/*** TextView设置内容后加上此监听 实现自动排版*/
public class OnTvGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {private TextView tv;public OnTvGlobalLayoutListener(TextView tv) {this.tv = tv;}@Overridepublic void onGlobalLayout() {tv.getViewTreeObserver().removeOnGlobalLayoutListener(this);final String newText = autoSplitText(tv);if (!TextUtils.isEmpty(newText)) {tv.setText(newText);}}/*** 针对TextView文字排版问题 进行自动排版** @param tv* @return*/private String autoSplitText(final TextView tv) {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);}return sbNewText.toString();}
}

Android TextView 自动排版工具类相关推荐

  1. Android:TextView 自动滚动(跑马灯) (转)

    Android:TextView 自动滚动(跑马灯) TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true" ...

  2. Android中对话框的工具类

    Android中对话框的工具类,里面总结了比较好用的方法,直接调用即可 public class DialogUtils {private DialogUtils() {}private static ...

  3. android 字体像素转换工具类_android px,dp,sp大小转换工具

    package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类 * * float s ...

  4. android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类

    Android中px与dip,sp与dip等的转换工具类 功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方 ...

  5. android 测试 大赛,轻量级android应用自动测试工具-2017全国大学生软件测试大赛.pdf...

    轻量级android应用自动测试工具-2017全国大学生软件测试大赛 DroidBot: A Lightweight Android App Testing Bot 轻量级Android应用自动测试工 ...

  6. php排版工具下载,论文自动排版工具下载

    煦航论文自动排版工具是一款实用的论文自动排版工具,该软件的功能非常的全面,可以对欢迎页,封面页,摘要页,论文正文,文献页,致谢页,申明页,任务书,开题报告,日志台进行设计,而且还可以直接生成论文,任务 ...

  7. Android沉浸式状态栏工具类,一句代码轻松搞定

    Android沉浸式状态栏工具类,一句代码轻松搞定 博客原文及源码地址:http://jaeger.itscoder.com/android/2016/03/27/statusbar-util.htm ...

  8. Android大小单位转换工具类

    package com.utouu.im.util; /**  * Android大小单位转换工具类  *   *   */ public class DisplayUtil { /** * 将px值 ...

  9. Android Studio自动排版格式化(android排版和xml排版)

    Android Studio自动排版格式化 今天自己想让Android Studio软件自动格式化排版,结果搜了一下,都说是Ctrl + Alt + L 结果不行 后面自已经过网上一些提示和自己探索终 ...

最新文章

  1. SPPNet网络结构
  2. SAP RETAIL 使用MM41创建的物料不能使用MMSC扩展其存储地点
  3. java latlng_【LBS】移动互联网基于LBS地理位置应用java开发必备
  4. 微软创立全新人工智能实验室,与DeepMind、OpenAI同台竞技
  5. input添加disabled属性出现的移动端兼容问题
  6. 刷新本地的DNS缓存数据
  7. java学习明确的路线规划奉上,助大家进阶
  8. LeetCode | Single Number II
  9. 中国智能卡市场的新机会
  10. FPGA测试方法以Mentor工具为例
  11. 基于matlab指纹识别论文,基于MATLAB的指纹识别算法.doc
  12. U盘提示''这张磁盘有写保护''修复工具
  13. Java:spring Value注解用法详解
  14. 英语思维(世界观,中英文思维的差别)
  15. input发送a.jax_Java EE 7和JAX-RS 2.0
  16. Java 生成Word文档 — 简单示例
  17. 无人机集群任务规划方法研究综述论文解读
  18. MOSFET与MOSFET驱动电路原理及应用(转)
  19. leetcode Rotate Image
  20. 测绘专业计算机应该学什么,视频 | 测绘工程有哪些就业方向,什么人适合学习测绘工程专业...

热门文章

  1. 【U8+】用友U8试算UFO报表后,显示#公式错误;并且函数向导中没有用友账务函数。
  2. ILSpy 无法反编译 Expression
  3. 计算机专业技能及专长,大学生个人简历技能专长
  4. Windows Docker阿里云镜像加速器
  5. 电竞游戏而生,这款高清显示器要逆天了~
  6. C#中线程安全的单例模式
  7. Python-Sql盲注检测
  8. (附源码)计算机毕业设计ssm大学生专业实习管理系统
  9. CAD图纸格式,DWG、DXF格式互转
  10. Android Content Providers(三)——Contacts Provider