遇到了页面上,使用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;
}
public static float px2sp(Context context, float pxVal)
{
return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
}
这样就实现了动态去改变文本的字体大小,又不会造成文本的重叠.