如何正确的计算单行文字高度,这个问题暂不说应用场景,这里单说技术,刚开始我查过好多相似的资料,解释的很单纯也很干脆,可是有个一个问题计算的结果和实际效果差了一个像素,(也许有大佬要问一个像素你都能看出来,厉害了我滴锅,固然一个像素我确定看不出来,这里若是是一行一个像素,当不少行的时候哪?),这时候我不知道也不肯定特么的是计算方式的问题仍是哪里的问题。后来我经过TextView来进行了一次相似的测量,发现和以前的方式结果不同,可是结果倒是我但愿的结果,买噶扥,我滴天。那么问题来了,是计算方法的问题仍是特么的Google的问题。app
这个是个问题?布局
带着这个问题,我首先想到是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的高度计算同样。至于若是取舍,你们能够根据须要进行选择。spa
这里还有另外一个方法,算是比较官方吧,Android本身来计算的一种方式code
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();
如上两种方式皆可实现单行高度测量,至于如何选择看自身须要。blog