首页 文章

自动缩放文本大小

提问于
浏览
8

我正在寻找一种方法,当我更改屏幕大小时,它将按比例调整文本大小 . 目前我尝试了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 回答

  • 2

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

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

  • 2

    您不需要调用 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;
    
    }
    
  • 35

    我使用它,按比例在屏幕的宽度 .

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

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

相关问题