textview中文字实用其大小

textview中文字适用其大小

import android.content.Context; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.widget.TextView; 
 
public class FontFitTextView extends TextView { 
 
   
public FontFitTextView(Context context) { 
       
super(context); 
        initialise
(); 
   
} 
 
   
public FontFitTextView(Context context, AttributeSet attrs) { 
       
super(context, attrs); 
        initialise
(); 
   
} 
 
   
private void initialise() { 
        testPaint
= new Paint(); 
        testPaint
.set(this.getPaint()); 
       
//max size defaults to the intially specified text size unless it is too small 
        maxTextSize
= this.getTextSize(); 
       
if (maxTextSize < 11) { 
            maxTextSize
= 20; 
       
} 
        minTextSize
= 10; 
   
} 
 
   
/* Re size the font so the specified text fits in the text box 
     * assuming the text box is the specified width. 
     */
 
   
private void refitText(String text, int textWidth) {  
       
if (textWidth > 0) { 
           
int availableWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight(); 
           
float trySize = maxTextSize; 
 
            testPaint
.setTextSize(trySize); 
           
while ((trySize > minTextSize) && (testPaint.measureText(text) > availableWidth)) { 
                trySize
-= 1; 
               
if (trySize <= minTextSize) { 
                    trySize
= minTextSize; 
                   
break; 
               
} 
                testPaint
.setTextSize(trySize); 
           
} 
 
           
this.setTextSize(trySize); 
       
} 
   
} 
 
   
@Override 
   
protected void onTextChanged(final CharSequence text, final int start, final int before, final int after) { 
        refitText
(text.toString(), this.getWidth()); 
   
} 
 
   
@Override 
   
protected void onSizeChanged (int w, int h, int oldw, int oldh) { 
       
if (w != oldw) { 
            refitText
(this.getText().toString(), w); 
       
} 
   
} 
 
   
//Getters and Setters 
   
public float getMinTextSize() { 
       
return minTextSize; 
   
} 
 
   
public void setMinTextSize(int minTextSize) { 
       
this.minTextSize = minTextSize; 
   
} 
 
   
public float getMaxTextSize() { 
       
return maxTextSize; 
   
} 
 
   
public void setMaxTextSize(int minTextSize) { 
       
this.maxTextSize = minTextSize; 
   
} 
 
   
//Attributes 
   
private Paint testPaint; 
   
private float minTextSize; 
   
private float maxTextSize; 
 
}