项目中往往有这种需求,要将某一列的所有TextView中文本,宽度调成一致,比如:
这个图片的左侧文字宽度完全一致,并且不同长度的文字间隔分配均匀。为此我自定义了一个TextView,
他有两种使用方式,第一种是指定了TextView的具体宽度,那么直接使用即可。
第二种是指定了所有TextView中最大的字体长度,比如图片中最大的长度为6(符号不算)。这个使用时就需要加上自己指定的最大长度,在使用的布局文件中加上命名空间
xmlns:autotext="http://schemas.android.com/apk/res-auto(我的工具是android studio,eclipse开发工具指定命名空间与android studio有差异)。指定后再在自定义TextView中加入标签autotext:maxLength="4"(这里指定最大的内容长度为4)。
Demo运行后如下图
:
不过本项目对数字符号汉字不做区分,因此为了加上冒号(第一张图片),在代码中添加了,各位可以按照自己需要修改即可。另外对一个文字的也没有过多处理,因为一个文字自己使用android提供的TextView设置gravity属性就行了
最后项目的下载地址:http://download.csdn.net/detail/u010646258/9412020 (由于博客上传的资源不能删除也不能修改,后来发现一个bug需要修改代码修改AutoAlignTextView的onMeasure方法)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//打开或者关闭键盘时可能会导致重绘,所以需要给startOffset和offset重新赋值
startOffset=5;
offset=5;
paint = getPaint();
int modeWidth;
if (MeasureSpec.getMode(widthMeasureSpec)==MeasureSpec.EXACTLY) {
//宽度精确就用精确值
modeWidth=MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY);
}else {
//宽度不是精确值就自己计算,起始偏移和字体之间间隔默认为5px
modeWidth=(int) (startOffset*2+getTextWidth(paint, maxText)+offset*(maxLength-1));
}
totalHeight=getTextWidth(paint, "一")+5*2+getPaddingBottom()+getPaddingTop();
setMeasuredDimension(modeWidth,resolveSize(totalHeight, heightMeasureSpec));
totalWidth = getMeasuredWidth();
totalHeight = getMeasuredHeight();
paint.setColor(Color.parseColor("#686464"));
startOffset = (totalWidth - getTextWidth(paint, maxText)) / 2;
}