Android知识Android技术知识

TextView字体自动适应宽度

2016-05-19  本文已影响0人  Tonki

原理

布局完成后,根据当前字体大小和已绘制的宽度与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);
            }
        });
    }
}
上一篇下一篇

猜你喜欢

热点阅读