• [转帖]自动调整TextView字体大小以适应文字长度


    package com.test.android.textview;
    
    import android.content.Context;
    import android.graphics.Paint;
    import android.util.AttributeSet;
    import android.widget.TextView;
    
    public class CustomTextView extends TextView {
    
        private static float DEFAULT_MIN_TEXT_SIZE = 10;
        private static float DEFAULT_MAX_TEXT_SIZE = 20;
    
        // Attributes
        private Paint testPaint;
        private float minTextSize, maxTextSize;
    
        public CustomTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
            initialise();
        }
    
        private void initialise() {
            testPaint = new Paint();
            testPaint.set(this.getPaint());
    
            // max size defaults to the intially specified text size unless it is
            // too small
            maxTextSize = this.getTextSize();
    
            if (maxTextSize <= DEFAULT_MIN_TEXT_SIZE) {
                maxTextSize = DEFAULT_MAX_TEXT_SIZE;
            }
    
            minTextSize = DEFAULT_MIN_TEXT_SIZE;
        };
    
        /**
         * Re size the font so the specified text fits in the text box * assuming
         * the text box is the specified width.
         */
        private void refitText(String text, int textWidth) {
            if (textWidth > 0) {
                int availableWidth = textWidth - this.getPaddingLeft()
                        - this.getPaddingRight();
                float trySize = maxTextSize;
                testPaint.setTextSize(trySize);
                while ((trySize > minTextSize)
                        && (testPaint.measureText(text) > availableWidth)) {
                    trySize -= 1;
                    if (trySize <= minTextSize) {
                        trySize = minTextSize;
                        break;
                    }
                    testPaint.setTextSize(trySize);
                }
                this.setTextSize(trySize);
            }
        };
    
        @Override
        protected void onTextChanged(CharSequence text, int start, int before,
                int after) {
            super.onTextChanged(text, start, before, 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);
            }
        }
    }
  • 相关阅读:
    如何在网页上显示html代码?
    3s自动跳转到登陆界面
    数据交互 ajax代码整理
    45种Javascript技巧大全【转藏】
    react环境搭建
    overflow 那些我们忽略的特点
    CSS3 动画效果合集
    2016年上半年前端资源汇总
    math.js 使用...
    php Apache No input file
  • 原文地址:https://www.cnblogs.com/xiaorenwu702/p/4401456.html
Copyright © 2020-2023  润新知