如何正确测量文字高度
Posted liemng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确测量文字高度相关的知识,希望对你有一定的参考价值。
如何正确的计算单行文字高度,这个问题暂不说应用场景,这里单说技术,刚开始我查过好多类似的资料,解释的很单纯也很干脆,但是有个一个问题计算的结果和实际效果差了一个像素,(也许有大佬要问一个像素你都能看出来,厉害了我滴锅,当然一个像素我肯定看不出来,这里如果是一行一个像素,当很多行的时候哪?),这时候我不知道也不确定特么的是计算方式的问题还是哪里的问题。后来我通过TextView来进行了一次类似的测量,发现和之前的方式结果不一样,但是结果却是我希望的结果,买噶扥,我滴天。那么问题来了,是计算方法的问题还是特么的Google的问题。
这个是个问题?
带着这个问题,我首先想到是Google源码是如何测试TextView的高度。可以深入到源码中去查看,这里暂不说源码,大家自己手动看下即可,这里原因最主要就是Google进行测量的时候不会使用小数去测量和布局(这里句话是重点)。下边看我正确的测试代码
1 FragmentActivity activity = getActivity(); 2 Paint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG); 3 float typeValue = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, activity.getResources().getDisplayMetrics()); 4 paint.setTextSize(typeValue); 5 Paint.FontMetrics fontMetrics = paint.getFontMetrics(); 6 int bottom = (int) Math.ceil(fontMetrics.bottom); 7 int top = (int) Math.floor(fontMetrics.top); 8 int textHeight = bottom - top;
这里需要说的就是Math这个类,主要就是把对应的小数转换成整数,而且对于正小数皆是向上取整数,负数小数向下取整。这样虽然算出的高度要比实际的高度要大,但是却和Google中TextView的高度计算一样。至于如果取舍,大家可以根据需要进行选择。
这里还有另一个方法,算是比较官方吧,android自己来计算的一种方式
TextView view = new TextView(activity); view.setTextSize(12); view.setText("测试"); int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); view.measure(widthMeasureSpec, heightMeasureSpec); int textHeight = view.getMeasuredHeight();
如上两种方式皆可实现单行高度测量,至于如何选择看自身需要。
以上是关于如何正确测量文字高度的主要内容,如果未能解决你的问题,请参考以下文章
为啥通过 AJAX 无限滚动加载的内容的高度在加载后没有正确测量?