【问题标题】:Auto Scale Text Size自动缩放文本大小
【发布时间】:2012-03-31 14:28:40
【问题描述】:

我正在寻找一种方法,当我更改屏幕尺寸时,它会按比例调整文本大小。 目前我试过 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"  />

【问题讨论】:

    标签: android textview


    【解决方案1】:

    你不需要调用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;
    
    }
    

    【讨论】:

    • 我正在通过另一个班级打电话,所以我需要打电话给我,对吗?我需要的只是布局 xml n 使用自定义类作为标题吗?
    • 看起来你明白了,但要清楚;您在 XML 中添加自定义类来代替 TextView,然后在您的代码中像普通的 TextView 一样引用它。
    • 这意味着我调用 TextView tv = new TextView(this);而不是 AutoFitTextView tv = new AutoFitTextView(this); ..我这样说对吗?
    • 如何与 textView 一起使用??
    • @Noman,只需将 layout.xml 中的“TextView”替换为“yourpackage.AutoFitTextView”。它对我来说很完美!!!非常清晰有效的代码:D
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      CONST 是我用来缩放字体的数字,我想要的尺寸。 它可以满足我的需求。

      【讨论】:

        猜你喜欢
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-11
        • 1970-01-01
        相关资源
        最近更新 更多