Android开发之TextView排版问题
下面直接是关于解决该问题的代码(根据别人的代码进行了修正以及测试,保证可以修改字体尺寸、颜色、根据padding调整,如果需要支持其他的格式可以将对应的属性添加至Paint类型的对象中):
1 public class NsTextView extends TextView {
2 private String text;
3 private float textSize;
4 private float paddingLeft;
5 private float paddingRight;
6 private int textColor;
7 private Paint paint1 = new Paint();
8 private float textShowWidth;
9
10 public NsTextView(Context context, AttributeSet attrs) {
11 super(context, attrs);
12 text = this.getText().toString();
13 textSize = this.getTextSize();
14 textColor = this.getTextColors().getDefaultColor();
15 paddingLeft = this.getPaddingLeft();
16 paddingRight = this.getPaddingRight();
17 paint1.setTextSize(textSize);
18 paint1.setColor(textColor);
19 paint1.setAntiAlias(true);
20 }
21
22 @Override
23 protected void onDraw(Canvas canvas) {
24 textShowWidth = this.getMeasuredWidth() - paddingLeft - paddingRight;
25 int lineCount = 0;
26 text = this.getText().toString();
27 if (text == null)
28 return;
29 char[] textCharArray = text.toCharArray();
30 float drawedWidth = 0;
31 float charWidth;
32 for (int i = 0; i < textCharArray.length; i++) {
33 charWidth = paint1.measureText(textCharArray, i, 1);
34 if (textCharArray[i] == '\n') {
35 lineCount++;
36 drawedWidth = 0;
37 continue;
38 }
39 if (textShowWidth - drawedWidth < charWidth) {
40 lineCount++;
41 drawedWidth = 0;
42 }
43 canvas.drawText(textCharArray, i, 1, paddingLeft + drawedWidth,
44 (lineCount + 1) * textSize, paint1);
45 drawedWidth += charWidth;
46 }
47 setHeight((int) ((lineCount + 1) * (int) textSize ));
48 }
49 }
Android开发之TextView排版问题的更多相关文章
- Android开发之TextView高级应用
Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...
- Android开发之TextView实现跑马灯效果
TextView及其子类,当字符内容太长显示不下时可以省略号代替未显示的字符:省略号可以在显示区域的起始,中间,结束位置,或者以跑马灯的方式显示文字(textview的状态为被选中). 其实现只需在x ...
- Android开发之TextView的下划线添加
如何给TextView添加下划线呢,最近项目中需要这个,于是就用代码添加了下划线功能.主要就是用Paint的setFlags方法来实现,具体如下: ((TextView)mScrollView.fin ...
- Android开发之TextView中间设置横线,适用于电商项目,商品原价之类的功能。
textview.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); //中间横线 textview.getPaint().setFlags(Pai ...
- Android开发之SpannableString具体解释
在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...
- 【Android UI】Android开发之View的几种布局方式及实践
引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...
- Android开发之PopupWindow
/* * Android开发之PopupWindow * * Created on: 2011-8-8 * Author: blueeagle * Email: liujiaxiang@g ...
- Android 开发之旅:深入分析布局文件&又是“Hello World!”
http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...
- android开发之Animations的使用(二)
android开发之Animations的使用(二) 本博文主要讲述的是android开发中的animation动画效果的使用,和上一篇博文不同的是,此次四种动画效果,主要使用的是xml文件实现的,提 ...
随机推荐
- js页面跳转 和 js打开新窗口 方法
js页面跳转 和 js打开新窗口 方法 第一种: 第二种: 第三种: 第四种: 第五种: 1.在原来的窗体中直接跳转用 window.location.href="你所要跳转的页面" ...
- Servlet 的基本架构
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...
- windows server2008 r2修改远程桌面连接端口。
1. windows 2008远程桌面端口默认是用的是3389端口,但是由于安全考虑,通常我们安装好系统后一般都会考虑把原来的3389端口更改为另外的端口. 2.更改过程: 2-1.打开注册表: ...
- hdu 4349 Xiao Ming's Hope lucas
题目链接 给一个n, 求C(n, 0), C(n, 1), ..........C(n, n)里面有多少个是奇数. 我们考虑lucas定理, C(n, m) %2= C(n%2, m%2)*C(n/2 ...
- poj 3185 The Water Bowls 高斯消元枚举变元
题目链接 给一行0 1 的数, 翻转一个就会使他以及它左右两边的都变, 求最少多少次可以变成全0. 模板题. #include <iostream> #include <vector ...
- xar安装使用方法
xar是一种扩展的归档格式(eXtensible ARchive format),是一种开源的文件格式.xar文件在Mac OS X 10.5里是用于软件安装程序. ---------------- ...
- IPv6地址的ping、telnet等操作
最近在研究https协议是如何传输数据的,用wireshark抓包分析,发现客户机和google网站在传输数据时使用了IPv6地址,于是相对ipv6地址测试下基本的功能. ping功能,直接使用pin ...
- C#中WebClient使用DownloadString中文乱码的解决办法
原文:C#中WebClient中文乱码的解决办法 第一次尝试: string question = textBox1.Text.ToString(); WebClient client= new We ...
- perl5 第二章 简单变量
第二章 简单变量 by flamephoenix 一.整型 二.浮点数 三.字符串 基本上,简单变量就是一个数据单元,这个单元可以是数字或字符串.一.整型 1.整型 PERL最常用的简单变量,由 ...
- Linux批量重命名文件
五种方法实现Linux批量重命名文件 Linux批量重命名文件是指对某些特定的文件统一进行重新命名,以改变原来一批文件的名称,这里介绍五种方法来实现. Linux批量重命名文件会涉及到改变一个字母.改 ...