開發(fā)中有個(gè)簡(jiǎn)單的需求,就是在SplashActivity上顯示一行免責(zé)聲明,需要單行顯示,并且在不同屏幕下也不能折行顯示,所以就打算自定義TextView來解決這個(gè)問題。
直接上代碼
/**
* 自定義TextView,文本內(nèi)容自動(dòng)調(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);
}
}
我們知道一個(gè)view繪制過程主要是兩個(gè)步驟onMeasure()和onDraw(),所以我在onDraw()中進(jìn)行了textview的長(zhǎng)度計(jì)算,進(jìn)行相應(yīng)的調(diào)整,原理很簡(jiǎn)單。