Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小

最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小

/** 
 * 自定义TextView,文本内容自动调整字体大小以适应TextView的大小 
 * @author yzp 
 */  
public class AutoFitTextView extends TextView {  
    private Paint mTextPaint;  
    private float mTextSize;  
  
    public AutoFitTextView(Context context) {  
        super(context);  
    }  
  
    public AutoFitTextView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
  
    /** 
     * Re size the font so the specified text fits in the text box assuming the 
     * text box is the specified width. 
     *  
     * @param text 
     * @param textWidth 
     */  
    private void refitText(String text, int textViewWidth) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(text&nbsp;==&nbsp;null&nbsp;||&nbsp;textViewWidth&nbsp;<=&nbsp;0)&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTextPaint&nbsp;=&nbsp;new&nbsp;Paint();&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTextPaint.set(this.getPaint());&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;availableTextViewWidth&nbsp;=&nbsp;getWidth()&nbsp;-&nbsp;getPaddingLeft()&nbsp;-&nbsp;getPaddingRight();&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float[]&nbsp;charsWidthArr&nbsp;=&nbsp;new&nbsp;float[text.length()];&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rect&nbsp;boundsRect&nbsp;=&nbsp;new&nbsp;Rect();&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTextPaint.getTextBounds(text,&nbsp;0,&nbsp;text.length(),&nbsp;boundsRect);&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;textWidth&nbsp;=&nbsp;boundsRect.width();&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTextSize&nbsp;=&nbsp;getTextSize();&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(textWidth&nbsp;>&nbsp;availableTextViewWidth)&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTextSize&nbsp;-=&nbsp;1;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTextPaint.setTextSize(mTextSize);&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;textWidth&nbsp;=&nbsp;mTextPaint.getTextWidths(text,&nbsp;charsWidthArr);&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setTextSize(TypedValue.COMPLEX_UNIT_PX,&nbsp;mTextSize);&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onDraw(Canvas&nbsp;canvas)&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onDraw(canvas);&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refitText(this.getText().toString(),&nbsp;this.getWidth());&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
}&nbsp;&nbsp;

box

相关推荐