Android TextView 自动排版工具类
使用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 自动排版工具类相关推荐
- Android:TextView 自动滚动(跑马灯) (转)
Android:TextView 自动滚动(跑马灯) TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true" ...
- Android中对话框的工具类
Android中对话框的工具类,里面总结了比较好用的方法,直接调用即可 public class DialogUtils {private DialogUtils() {}private static ...
- android 字体像素转换工具类_android px,dp,sp大小转换工具
package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类 * * float s ...
- android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类
Android中px与dip,sp与dip等的转换工具类 功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方 ...
- android 测试 大赛,轻量级android应用自动测试工具-2017全国大学生软件测试大赛.pdf...
轻量级android应用自动测试工具-2017全国大学生软件测试大赛 DroidBot: A Lightweight Android App Testing Bot 轻量级Android应用自动测试工 ...
- php排版工具下载,论文自动排版工具下载
煦航论文自动排版工具是一款实用的论文自动排版工具,该软件的功能非常的全面,可以对欢迎页,封面页,摘要页,论文正文,文献页,致谢页,申明页,任务书,开题报告,日志台进行设计,而且还可以直接生成论文,任务 ...
- Android沉浸式状态栏工具类,一句代码轻松搞定
Android沉浸式状态栏工具类,一句代码轻松搞定 博客原文及源码地址:http://jaeger.itscoder.com/android/2016/03/27/statusbar-util.htm ...
- Android大小单位转换工具类
package com.utouu.im.util; /** * Android大小单位转换工具类 * * */ public class DisplayUtil { /** * 将px值 ...
- Android Studio自动排版格式化(android排版和xml排版)
Android Studio自动排版格式化 今天自己想让Android Studio软件自动格式化排版,结果搜了一下,都说是Ctrl + Alt + L 结果不行 后面自已经过网上一些提示和自己探索终 ...
最新文章
- SPPNet网络结构
- SAP RETAIL 使用MM41创建的物料不能使用MMSC扩展其存储地点
- java latlng_【LBS】移动互联网基于LBS地理位置应用java开发必备
- 微软创立全新人工智能实验室,与DeepMind、OpenAI同台竞技
- input添加disabled属性出现的移动端兼容问题
- 刷新本地的DNS缓存数据
- java学习明确的路线规划奉上,助大家进阶
- LeetCode | Single Number II
- 中国智能卡市场的新机会
- FPGA测试方法以Mentor工具为例
- 基于matlab指纹识别论文,基于MATLAB的指纹识别算法.doc
- U盘提示''这张磁盘有写保护''修复工具
- Java:spring Value注解用法详解
- 英语思维(世界观,中英文思维的差别)
- input发送a.jax_Java EE 7和JAX-RS 2.0
- Java 生成Word文档 — 简单示例
- 无人机集群任务规划方法研究综述论文解读
- MOSFET与MOSFET驱动电路原理及应用(转)
- leetcode Rotate Image
- 测绘专业计算机应该学什么,视频 | 测绘工程有哪些就业方向,什么人适合学习测绘工程专业...