android大字体原理,如何让Android TextView(包括子类)的字体大...

在使用TextView的时候,很多情况下内容的长度是要变化的,字数多了,可能不能显示全部的内容,那如何让TextView在字数超了的时候,能自动缩小字体,或者直接匹配最优的字体大小,使内容全屏并全部显示

代码如下:

protected void autoMatchFont(final TextView view){

view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {

@Override

public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {

float vWidth = v.getWidth();

//LogUtil.d("vWidth=" + vWidth);

TextPaint paint = view.getPaint();

String text = view.getText().toString();

float textLen = paint.measureText(text);

//LogUtil.d("textLen=" + textLen);

float oldSize = view.getTextSize();

//LogUtil.d("oldSize=" + oldSize);

if (textLen != vWidth && isNeedAdapta){

isNeedAdapta = false;

float size = vWidth * oldSize / textLen;

//LogUtil.d("size=" + size);

view.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);

}

}

});

}

方法已经封装好了,传入TextView对象即可,原理很简单:

1.float textLen = paint.measureText(text);//计算当前显示的内容,用当前的字体(paint是通过view.getPaint()得到的,包含了当前view的字体信息)计算全部内容的宽度

2.float vWidth = v.getWidth();//得到当前的组件宽度

3.textLen 和vWidth 比较,内容的宽度大于组件宽度,则会换行或者显示不全,反之可推

4.view.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);设置字体大小时,必须以TypedValue.COMPLEX_UNIT_PX的类型设置,这是为了匹配view.getTextSize(),因为这个方法得到的字体也是以px为单位的,而view.setTextSize(size)默认是以sp为单位

要注意的是,组件的宽度必须在OnLayoutChangeListener里面获取,否则为0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值