android textview 自动换行 整齐排版
2016-02-24 16:33
1506 查看
一、问题在哪里?
textview显示长文字时会进行自动折行,如果遇到一些特殊情况,自动折行会杯具成这个样子:
View Code
调用方式:
autoSplitText(tv, "1、");
悬挂缩进效果:
[转载请保留本文地址:/article/11872791.html]
textview显示长文字时会进行自动折行,如果遇到一些特殊情况,自动折行会杯具成这个样子:
private String autoSplitText(final TextView tv, final String indent) { final String rawText = tv.getText().toString(); //原始文本 final Paint tvPaint = tv.getPaint(); //paint,包含字体等信息 final float tvWidth = tv.getWidth() - tv.getPaddingLeft() - tv.getPaddingRight(); //控件可用宽度 //将缩进处理成空格 String indentSpace = ""; float indentWidth = 0; if (!TextUtils.isEmpty(indent)) { float rawIndentWidth = tvPaint.measureText(indent); if (rawIndentWidth < tvWidth) { while ((indentWidth = tvPaint.measureText(indentSpace)) < rawIndentWidth) { indentSpace += " "; } } } //将原始文本按行拆分 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); //从手动换行的第二行开始,加上悬挂缩进 if (lineWidth < 0.1f && cnt != 0) { sbNewText.append(indentSpace); lineWidth += indentWidth; } 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(); }
View Code
调用方式:
autoSplitText(tv, "1、");
悬挂缩进效果:
[转载请保留本文地址:/article/11872791.html]
相关文章推荐
- 【Android】SharedPreference使用
- 通过gitHub获取vlc-Android源码
- Android JSON写入,解析
- android-圆形按钮的实现+++流式布局——FlowLayout
- Android DiskLruCache完全解析,硬盘缓存的最佳方案
- Android Studio下创建menu布局文件
- Android Volley完全解析(四),带你从源码的角度理解Volley
- Android中高亮变色显示文本中的关键字
- Android Volley完全解析(一),初识Volley的基本用法
- Android滑动页面导航效果: PagerSlidingTabStrip
- android 2.3系统闹钟中 重复项的思路
- 从源码编译Android系统的Java类库和JNI动态库的方法
- Android Studio方法前添加自己的注释
- Android事件分发机制完全解析(一)
- android 常用代码github下载地址
- android apk的编译过程
- 利用源码编译Android系统的APK和可执行命令的方法
- android ndk编写
- Android自定义控件之仿美团下拉刷新
- windows下 更新 android studio SDK 到最新版本 解决方案