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; 
 
} 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值