AutoResizeTextView:在一些旧的Android版本上不同的调整大小行为

时间:2015-11-19 14:15:25

标签: android textview

我有这个实现AutoResizeTextView的类:

public class AutoResizeTv extends TextView {
private float minTextSize = 2;
private float maxTextSize = 25;

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

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

private void init() {

    maxTextSize = this.getTextSize();
    if (maxTextSize < 35) {
        maxTextSize = 25;
    }
    minTextSize = 2;
}

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

在大多数Android设备上运行良好,但我注意到在一些旧的Android版本(例如带有sdk版本13的平板电脑)上,文字没有缩放以适应其容器。 如何修复它以在所有Android设备上获得相同的行为(我更喜欢编辑此类而不是使用新的AutoResizeTextView实现)

0 个答案:

没有答案