TextView换行对齐
2015-11-10 09:50
316 查看
我们在开发的时候系统的TextView有时候越到一些字符就自动莫名的换行,为了不让其换行,我们就要重新TextView来自定义自己的文本,请看下面代码。
这是我项目中的代码吗,大家还有什么其他需求,可以自己在其基础上重新添加代码,以满足自己的项目需求
public class JustifyTextView extends TextView { public JustifyTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override protected void onDraw(Canvas canvas) { TextPaint mPaint = getPaint(); Paint.FontMetrics fm = mPaint.getFontMetrics(); float baseline = fm.descent - fm.ascent; float x = 0; float y = baseline; //由于系统基于字体的底部来绘制文本,所有需要加上字体的高度。 String txt = this.getText().toString(); //文本自动换行 String[] texts = autoSplit(txt, mPaint, getWidth() - 5); Log.d( Arrays.toString(texts)); for(String text : texts) { canvas.drawText(text, x, y, mPaint); //坐标以控件左上角为原点 y += baseline + fm.leading; //添加字体行间距 } } private boolean isFirstLineOfParagraph(int lineStart, String line) { return line.length() > 3 && line.charAt(0) == ' ' && line.charAt(1) == ' '; } /** * 自动分割文本 * @param content 需要分割的文本 * @param p 画笔,用来根据字体测量文本的宽度 * @param width 最大的可显示像素(一般为控件的宽度) * @return 一个字符串数组,保存每行的文本 */ private String[] autoSplit(String content, Paint p, float width) { int length = content.length(); float textWidth = p.measureText(content); if(textWidth <= width) { return new String[]{content}; } List<String> result = Lists.newArrayList(); int start = 0, end = 1; while(start < length) { if(p.measureText(content, start, end) >= width) { //文本宽度超出控件宽度时 result.add(content.substring(start, end)); start = end; } if(end == length) { //不足一行的文本 result.add(content.substring(start, end)); break; } end += 1; } return result.toArray(new String[0]); } private boolean needScale(String line) { if (line.length() == 0) { return false; } else { return line.charAt(line.length() - 1) != '\n'; } } }
这是我项目中的代码吗,大家还有什么其他需求,可以自己在其基础上重新添加代码,以满足自己的项目需求
相关文章推荐
- JAVA操作csv文件(导入导出)
- linux下c/c++实例之八字符串分隔、去空格和转大小写
- java 随机生成数字和密码
- DBAplus广州社群第一次线下活动
- DBAplus广州社群第一次线下活动
- Software update notification template (软件更新通知模板)
- Callable,Runnable比较及用法
- java泛型见解
- Windows下安装并设置Redis
- mysql 锁 for update
- iOS9下App Store新应用提审攻略
- (总结)隐藏Apache版本号的必要性与方法
- strcpy和memcpy
- 用Python写了一个数据格式转换小程序
- 倒计时显示时间,显示毫秒
- Recommending items to more than a billion people
- SQL Server数据库文件. mdf和.mds的导出
- Log4j2简单使用
- 一份简单的在 Linux下编译及调试 C 代码的指南
- C++ new失败的处理