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主页