码迷,mamicode.com
首页 > 其他好文 > 详细

如何正确测量文字高度

时间:2018-09-19 11:39:04      阅读:461      评论:0      收藏:0      [点我收藏+]

标签:otto   效果   实现   eval   布局   size   text   mat   计算方法   

  如何正确的计算单行文字高度,这个问题暂不说应用场景,这里单说技术,刚开始我查过好多类似的资料,解释的很单纯也很干脆,但是有个一个问题计算的结果和实际效果差了一个像素,(也许有大佬要问一个像素你都能看出来,厉害了我滴锅,当然一个像素我肯定看不出来,这里如果是一行一个像素,当很多行的时候哪?),这时候我不知道也不确定特么的是计算方式的问题还是哪里的问题。后来我通过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();

 

  如上两种方式皆可实现单行高度测量,至于如何选择看自身需要。

 

如何正确测量文字高度

标签:otto   效果   实现   eval   布局   size   text   mat   计算方法   

原文地址:https://www.cnblogs.com/liemng/p/9673361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!