Android TextView 自动排版工具类
来源:互联网 发布:新疆卫生系统网络直报 编辑:程序博客网 时间:2024/06/04 18:55
使用TextView时会经常出现以下现象:
1、当遇到标点符号时,经常出现自动标点符号加上前面的一个汉字换到下一行,导致当前行出现缺一块的现象
2、当遇到英文时如果一行展示不下就自动换到下一行,排版参差不齐
下面方法实现了主动控制排版,实现了每行都显示满在换行,遇到英文也是可以把一个单词拆开换行,当需要设置文本时,调用此方法即可。
/** * 通过自动换行的方式设置文本 优化排版 * @param tv 要设置文本的文本控件 * @param text 要设置的文本内容 */ private void setAutoSplitText(TextView tv,String text){ tv.setText(text); tv.getViewTreeObserver().addOnGlobalLayoutListener(new OnTvGlobalLayoutListener(tv)); }
/** * TextView设置内容后加上此监听 实现自动排版 */public class OnTvGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener { private TextView tv; public OnTvGlobalLayoutListener(TextView tv) { this.tv = tv; } @Override public 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(); }}
阅读全文
1 0
- Android TextView 自动排版工具类
- android textview文字自动排版
- android textview 自动换行 整齐排版
- android textview 自动换行 整齐排版
- android textview 自动换行 整齐排版
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- Android TextView自动换行文字排版参差不齐的原因
- 适配iOS11&iPhoneX的一些坑
- Android Shape绘制实用圆圈
- 一位资深程序员大牛给予Java初学者的学习路线建议
- BZOJ 2427: [HAOI2010]软件安装
- CentOS 7 YUM 10分钟快速安装 LNMP 环境详细教程
- Android TextView 自动排版工具类
- Spring 源码解析之HandlerMapping源码解析(一)
- 安装github
- Cloudera hadoop上的一些问题
- windows下安装配置Jenkins
- 【codevs 1001】舒适的路线
- div显示未展示内容,有条件的隐藏内筒
- Android--------工具类StatusBarUtil实现完美状态栏
- 数据库服务器构建和部署最佳实践