0

前几天,我发现这段代码可以调整 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;

}
4

1 回答 1

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作示例。

就是这样,很容易做到。

于 2012-04-26T01:27:55.317 回答