首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Android自定义自适应文字大小的控件

2024-12-17 来源:花图问答
night_rain.png

创建CustomElasticTextView继承AppCompatTextView

public class CustomElasticTextView extends AppCompatTextView {

    private int measureWidht;

    public CustomElasticTextView(Context context) {
        super(context);
    }

    public CustomElasticTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomElasticTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

测量控件尺寸

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //获取控件的宽度
        measureWidht = MeasureSpec.getSize(widthMeasureSpec);
    }

内容处理

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //显示的内容
        String content = this.getText().toString().trim();
        if (!TextUtils.isEmpty(content)) {
            //获取绘制时候的画笔
            TextPaint mTextPaint = this.getPaint();
            //获取文字的尺寸
            float mTextSize = mTextPaint.getTextSize();
            //内容的宽度
            float mContentWidth = mTextPaint.measureText(content);
            //显示内容的宽度
            int displayWidht = measureWidht - this.getPaddingLeft() - this.getPaddingRight();
            //当内容宽度大于显示的宽度的时候就要处理文字的大小
            if (mContentWidth > displayWidht) {
                /**
                 * 思路:
                 * 1、计算出原文字尺寸和文字长度的比例
                 * 2、根据需要显示长度的尺寸和上面的比例计算出文字需要设置的大小
                 * 3、设置文字大小
                 */
                float scale = mTextSize / mContentWidth;
                float manageTextSize = scale * displayWidht;
                 manageTextSize);
            }
        }
    }

效果

效果图.png
显示全文