很多时候需要动态根据字符长度设置字体的大小来适应给定的宽度,一般来说可以通过measureText()或者getTextBounds来实现。两者的区别在于后者获得的宽度是紧紧的贴着字体,前者是左右会多出一点点宽度。这里采用getTextBounds来实现。
直接看代码吧
public void setAutoTextSize(){
float width=textView.getWidth();
float size=textView.getTextSize();
Rect rect=new Rect();
Paint paint=textView.getPaint();
paint.getTextBounds(textView.getText().toString(),0,textView.getText().length(),rect);
while(rect.width()>width){
size--;
paint.getTextBounds(textView.getText().toString(),0,textView.getText().length(),rect);
textView.setTextSize(size);
}
}
getTextBounds中的rect是hi一个矩形,该方法会获得一个包裹着字符的矩形,并将值设置给这里的rect。当测量的矩形宽度大于给定宽度时循环缩小字体大小就行。