自动缩放文本大小

时间:2012-03-15 03:40:53

标签: android textview

我正在寻找一种方法,当我更改屏幕尺寸时,它会按比例调整文本大小。 目前我试过了 Auto Scale TextView Text to Fit within Bounds但似乎没有效果。但我不确定我是否以正确的方式做到了。我现在正打电话给

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"  />

3 个答案:

答案 0 :(得分:36)

您不需要致电AutoResizeTextView test,因为课程延伸TextView,您可以说TextView。我不明白你为什么还需要拨打resizeText()

无论哪种方式,这里都是我想用来自动重新调整文本大小的自定义类。

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 :(得分:4)

好消息! Google在Android O中引入了Autosizing TextView支持。它也将包含在支持库中。

https://developer.android.com/preview/features/autosizing-textview.html

答案 2 :(得分:2)

我在屏幕宽度上按比例使用它。

DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        width_screen=displaymetrics.widthPixels;
Mytext.setTextSize(TypedValue.COMPLEX_UNIT_PX, (width_screen/CONST));

CONST是我用来缩放字体的数字,在我想要的尺寸中。 它适合我的需要。