如何使用AutoFitTextView

时间:2012-04-26 00:17:30

标签: android resize textview

有一天,我发现这段代码可以调整TextView中的文本大小。但是,我如何使用它并将其调用到我的项目中。我是新手:))

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;

}

1 个答案:

答案 0 :(得分:2)

在您的布局中,除了指向TextView课程的位置外,您可以像典型的AutoFitTextView一样使用它。

 <com.your.package.name.AutoFitTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

在代码中:

AutoFitTextView foo = (AutoFitTextView) findViewById(id);

您真正需要做的就是在布局中使用它。如果您不在布局中使用它,请不要在您的代码中使用它。因此,要么在布局和代码中使用它,只在布局中使用它,要么根本不使用它。

此外,在您的布局中确保您正在找到正确的位置。我不知道您的AutoFitTextView课程包含哪个包,所以我只使用com.your.package.name作为示例。

就是这样,很容易。