自动缩放文字大小 [英] Auto Scale Text Size

查看:144
本文介绍了自动缩放文字大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种方法来当我改变屏幕尺寸会按比例调整文本。 目前,我试着 自动缩放TextView的文本,以在一定范围内配合,但它不吨似乎是工作。但我不知道我做了正确的方法还是不行。我现在目前由

呼叫

  AutoResizeTextView测试=新AutoResizeTextView(本);
测试=(AutoResizeTextView)findViewById(R.id.test456);
test.resizeText(); //我把这个来调整..我对不对?
 

XML

 < com.mypackage.AutoResizeTextView
机器人:ID =@ + ID / test456
机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:layout_weight =1/>
 

解决方案

您不需要调用 AutoResizeTextView测试,你可以说的TextView ,因为该类扩展的TextView 。我不明白你为什么会需要调用 resizeText()或者

无论哪种方式,这里有一个自定义类,我喜欢使用自动调整大小的文本。

 公共类AutoFitTextView扩展TextView的{

公共AutoFitTextView(上下文的背景下){
    超(上下文);
    在里面();
}

公共AutoFitTextView(上下文的背景下,ATTRS的AttributeSet){
    超(背景下,ATTRS);
    在里面();
}

私人无效的init(){

    maxTextSize = this.getTextSize();
    如果(maxTextSize&{35){
        maxTextSize = 30;
    }
    minTextSize = 20;
}

私人无效refitText(字符串文本,诠释输出textWidth){
    如果(输出textWidth大于0){
        INT availableWidth =输出textWidth  -  this.getPaddingLeft()
                 -  this.getPaddingRight();
        浮trySize = maxTextSize;

        this.setTextSize(TypedValue.COMPLEX_UNIT_PX,trySize);
        而((trySize> minTextSize)
                &功放;&安培; (this.getPaint()measureText(文本)GT; availableWidth)){
            trySize  -  = 1;
            如果(trySize< = minTextSize){
                trySize = minTextSize;
                打破;
            }
            this.setTextSize(TypedValue.COMPLEX_UNIT_PX,trySize);
        }
        this.setTextSize(TypedValue.COMPLEX_UNIT_PX,trySize);
    }
}

@覆盖
保护无效onTextChanged(最终CharSequence的文字,最终诠释开始,
        最终诠释前,后的最终诠释){
    refitText(text.toString(),this.getWidth());
}

@覆盖
保护无效onSizeChanged(INT W,INT小时,INT oldw,诠释oldh){
    如果(W!= oldw){
        refitText(this.getText()的toString(),W);
    }
}

@覆盖
保护无效onMeasure(INT widthMeasureSpec,诠释heightMeasureSpec){
    super.onMeasure(widthMeasureSpec,heightMeasureSpec);
    INT上级宽度= MeasureSpec.getSize(widthMeasureSpec);
    refitText(this.getText()的toString(),上级宽度。);
}

公众持股量getMinTextSize(){
    返回minTextSize;
}

公共无效setMinTextSize(INT minTextSize){
    this.minTextSize = minTextSize;
}

公众持股量getMaxTextSize(){
    返回maxTextSize;
}

公共无效setMaxTextSize(INT minTextSize){
    this.maxTextSize = minTextSize;
}

私人浮动minTextSize;
私人浮动maxTextSize;

}
 

I'm looking for a way to when I change a screen size it will proportionally resize the text. Currently I tried Auto Scale TextView Text to Fit within Bounds but it doesn't seems to be working. but I'm not sure I do it the right way or not. I'm now currently calling by

AutoResizeTextView test = new AutoResizeTextView(this);
test=(AutoResizeTextView)findViewById(R.id.test456);
test.resizeText(); // I call this to resize.. am I right?

XML

<com.mypackage.AutoResizeTextView
android:id="@+id/test456"
android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:layout_weight="1"  />

解决方案

You don't need to call AutoResizeTextView test, you can say TextView since the class extends TextView. I don't see why you'd need to call resizeText() either.

Either way, here's a custom class I like to use to auto re-size text.

public class AutoFitTextView extends TextView {

public AutoFitTextView(Context context) {
    super(context);
    init();
}

public AutoFitTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

private void init() {

    maxTextSize = this.getTextSize();
    if (maxTextSize < 35) {
        maxTextSize = 30;
    }
    minTextSize = 20;
}

private void refitText(String text, int textWidth) {
    if (textWidth > 0) {
        int availableWidth = textWidth - this.getPaddingLeft()
                - this.getPaddingRight();
        float trySize = maxTextSize;

        this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize);
        while ((trySize > minTextSize)
                && (this.getPaint().measureText(text) > availableWidth)) {
            trySize -= 1;
            if (trySize <= minTextSize) {
                trySize = minTextSize;
                break;
            }
            this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize);
        }
        this.setTextSize(TypedValue.COMPLEX_UNIT_PX, 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);
    }
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    refitText(this.getText().toString(), parentWidth);
}

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

private float minTextSize;
private float maxTextSize;

}

这篇关于自动缩放文字大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆