技术干货Android之旅Android技术知识

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

2018-05-22  本文已影响34人  Android师哥
night_rain.png

在开发或多或少的会接触到有关金钱方面的APP,这种时候就会有显示的问题:当金额较大的时候,如果用普通的控件将会出现折行、显示不全的情况;介于这种情况,做了当前的自定义控件,之后会在我的GitHub工具库中增加。

创建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;
                this.setTextSize(TypedValue.COMPLEX_UNIT_PX, manageTextSize);
            }
        }
    }

效果

效果图.png

比较简单的一个自定义控件,注释基本也都有,有需要改进的地方还望提出~~谢谢!
GitHub主页

上一篇下一篇

猜你喜欢

热点阅读