原理
布局完成后,根据当前字体大小和已绘制的宽度与TextView的宽度的比例调整字体相应的比例。
调整后字体大小 = view宽度 / 绘制宽度 * 当前字体大小
public class ScaleTextView extends TextView {
public ScaleTextView(Context context) {
this(context, null, 0);
}
public ScaleTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ScaleTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Override public void onGlobalLayout() {
//测量字符串的长度
float measureWidth = getPaint().measureText(String.valueOf(getText()));
//得到TextView 的宽度
int width = getWidth() - getPaddingLeft() - getPaddingRight();
//当前size大小
float textSize = getTextSize();
if (width < measureWidth) {
textSize = (width / measureWidth) * textSize;
}
//注意,使用像素大小设置
setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
}
}
网友评论