自适应内容的TextView

项目中往往有这种需求,要将某一列的所有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;
		
	}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值