android中的分辨率、行高和字体大小

想要计算下在一个TextView中最多能打印多少字符,但是理论计算结果和实际结果却不一致。

先说下我的算法:

获取屏幕的分辨率(px): width * height

获取屏幕密度: density

设置字体大小(sp): textSize

设置单倍行距(sp): SingleLineSpace

那么字体的行数(含行距)应该为: height / density / textSize = line

对于我的手机,分辨率为720 * 1280, 密度为2.0, 字体大小为20sp,单倍行距为20sp,那么理论结果是16行(含行距)。可是实际结果却是14.5行左右,明显后面几行被截掉了。

思考了一天多,也到好多论坛和群里去问,基本没人理啊,泪流满面。最后终于弄明白了,具体原因如下:

在多倍行距为0时,显示的字体大小就是设置的textSize,也就是说当把lineSpacingMultiplier设置为0时,显示的结果和计算的结果是一致的。但是当lineSpacingMultiplier大于0时,对于字体大小使用的不是设置的textSize。例如,设置textSize为20sp,使用函数getTextBounds可以获取字体的最小Rect,能够发现字高为37px,若单倍行距为20sp,多倍行距为1.0,那么实际的行高(包括行距)为87!也就是说,此时使用的字体大小是真实字高,而不是设置的textSize。

其实,只要使用TextView.getLineHeight()就能获得真实行高了...我辛辛苦苦研究了快一天,就是在找这个API啊...

相关代码:

获取字体的实际大小(最小包围盒)

        TextPaint paint;
        paint = ((TextView)findViewById(R.id.content)).getPaint();
        paint.getTextBounds(C, 0, 1, bounds);

获取行高

int l = textView.getLineHeight();


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值