首页 文章

android:在对话框中自动缩放textView

提问于
浏览
0

我试图在对话框中将TextView设置为自动缩放,

xml

<com.abc.abc.AutoResizeTextView
        android:id="@+id/text_btn"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_above="@+id/view2"
        android:layout_alignLeft="@+id/linear_layout_color1"
        android:layout_alignRight="@+id/linear_layout_color1"
        android:layout_alignTop="@+id/doodleView"
        android:layout_margin="1dp"
        android:background="@color/white"
        android:gravity="center"
        android:text="A"
        android:textColor="@color/grey" />

AutoResizeTextView

AutoResizeTextView 一样

Auto Scale TextView Text to Fit within Bounds

然后在java代码中

AutoResizeTextView  textView = (AutoResizeTextView ) writing_dialog.findViewById(R.id.text_btn);
    textView.setText("B");

问题:

我不知道为什么文本B仍然显得很小而且没有自动缩放...

谢谢你的建议!

1 回答

  • 1

    我正在使用这个版本的自动适合文本视图,效果很好:

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

    还将宽度设置为:

    android:layout_width="match_parent"
    

相关问题