開發(fā)中有個簡單的需求雾棺,就是在SplashActivity上顯示一行免責聲明卸夕,需要單行顯示柱告,并且在不同屏幕下也不能折行顯示截驮,所以就打算自定義TextView來解決這個問題。
直接上代碼
/**
* 自定義TextView际度,文本內(nèi)容自動調(diào)整字體大小以單行顯示
*
*/
public class SingleLineTextView extends android.support.v7.widget.AppCompatTextView {
private Paint mTextPaint;
private float mTextSize;
public SingleLineTextView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
refitText(this.getText().toString(), this.getWidth());
}
/**
* Re size the font so the specified text fits in the text box assuming the
* text box is the specified width.
*
* @param text
* @param textViewWidth
*/
private void refitText(String text, int textViewWidth) {
if (text == null || textViewWidth <= 0)
return;
mTextPaint = getPaint();
mTextSize = getTextSize();
int availableTextViewWidth = textViewWidth - getPaddingLeft() - getPaddingRight();
float textMeausreWith = mTextPaint.measureText(text);
if (textMeausreWith > availableTextViewWidth) {
mTextSize = mTextSize * ((float) availableTextViewWidth / textMeausreWith);
}
this.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
}
}
我們知道一個view繪制過程主要是兩個步驟onMeasure()和onDraw()葵袭,所以我在onDraw()中進行了textview的長度計算,進行相應的調(diào)整乖菱,原理很簡單坡锡。