继承TextView,在onlayout方法里面循环去判断字体的总长度是否大于控件的宽度,如果大,那么继续压缩,直到小于或者到达设定的最小值,最大值同理。
package com.example.mytextview;
import android.content.Context;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;
public class TextAutoResize extends TextView {
private static final float MIN_TEXT_SIZE = 25.0F;
private static final float MAX_TEXT_SIZE = 55.0F;
public TextAutoResize(Context paramContext) {
super(paramContext);
}
public TextAutoResize(Context paramContext,
AttributeSet paramAttributeSet) {
super(paramContext, paramAttributeSet);
}
/**
* 重新设置字体的大小
*/
private void resize() {
Paint localPaint = new Paint();
//获得控件的宽度
int i = getWidth();
Log.i("hei",getHeight()+"---"+getTextSize());
//获得字体的大小
float f1 = getTextSize();
//画笔设置字体的大小
localPaint.setTextSize(f1);
//计算控件中文字的总长度
float f2 = localPaint.measureText(getText().toString());
while (true) {
//字体最小控制在15.0F
while (true) {
setTextSize(0, f1);
//在最大值和最小值之间,正常压缩调整
if (MAX_TEXT_SIZE >= f1&&f1>=MIN_TEXT_SIZE)
{
break;
}
else
{
//超过最大程度
if(f1>MAX_TEXT_SIZE)
{
f1 = MAX_TEXT_SIZE;
}
//小于最小程度
if(f1<MIN_TEXT_SIZE)
{
f1 = MIN_TEXT_SIZE;
}
}
}
localPaint.setTextSize(f1);
//对字体进行调整,每次-1.0F
f1 -= 1.0F;
//重新获取文字的总长度
f2 = localPaint.measureText(getText().toString());
//已经压缩到最小
if((f1 ==MIN_TEXT_SIZE-1)&&i<f2)
{
break;
}
//字体总长度小于控件宽度,不用进行改变
if (i >= f2)
break;
}
}
@Override
protected void onLayout(boolean paramBoolean, int paramInt1, int paramInt2,
int paramInt3, int paramInt4) {
super.onLayout(paramBoolean, paramInt1, paramInt2, paramInt3, paramInt4);
resize();
}
}
|
android---重写textview自适应屏幕分辨率,压缩字体大小
最新推荐文章于 2021-05-25 15:37:56 发布