textView 动态改变字体的大小

遇到了页面上,使用RelativeLayout 包裹两个TextView,设置文本后,发现两个文本有重叠的地方,所以,写了一个方法,来动态判断两个文本的宽度和屏幕宽度的大小关系,来改变字体的大小.

1.主方法

float width = ScreenUtil.getScreenWidth(MainActivity.this);

		tv01_width = measureLength(tv01.getText().toString().trim(),tv01.getTextSize());

		tv02_width = measureLength(tv02.getText().toString().trim(),tv02.getTextSize());

		Log.i("Tag", "tv01_width = "+tv01_width+"tv02_width = "+tv02_width+"width = "+width);
		result = width - (tv01_width + tv02_width);
		while( result <= 0){

			float tvSize01 = DensityUtils.px2sp(MainActivity.this,tv01.getTextSize());
			float tvSize02 = DensityUtils.px2sp(MainActivity.this,tv02.getTextSize());

			tv01.setTextSize((tvSize01 - 1));
			tv02.setTextSize((tvSize02 - 1));

			
			
			tv01_width = measureLength(tv01.getText().toString().trim(),tv01.getTextSize());

			tv02_width = measureLength(tv02.getText().toString().trim(),tv02.getTextSize());
			
			Log.i("Tag", "tv01_width = "+tv01_width+"tv02_width = "+tv02_width+"width = "+width);
			
			result = width - (tv01_width + tv02_width);

		}


	}


	/**
	 * 测量长度
	 * */
	private float measureLength(String text, float f) {

		TextPaint paint = new TextPaint();
		float scaledDensity = getResources().getDisplayMetrics().scaledDensity;
		paint.setTextSize(scaledDensity * f);
		return paint.measureText(text);
	}

2.测量屏幕宽度的工具类

获取屏幕的宽度

public static float getScreenWidth(Context context) {
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics outMetrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(outMetrics);
		return outMetrics.widthPixels;
	}


3.px转sp的工具类

public static float px2sp(Context context, float pxVal)
	{
		return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
	}


这样就实现了动态去改变文本的字体大小,又不会造成文本的重叠.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值