如何在Paint / TextPaint中获取下划线粗细

时间:2017-10-06 07:29:33

标签: android paint

文字可以像这样加下划线

myPaint.setUnderlineText(true);

有没有办法以像素为单位获得下划线的粗细?

我浏览了Paint源代码,但我没有看到任何内容。

备注

  • 我了解TextPaint隐藏的underlineThickness属性。即使我通过反射访问它,它只是一个乘数,而不是实际的厚度。
  • 我没有尝试改变厚度(如this question中所述)。
  • 我从头开始完全自定义垂直TextView,我必须实现自己的下划线。如果可能的话我想使用标准厚度。否则我可能会选择一些文本高度(使用(bottom - top) / 16似乎很接近)。

测试Nikola Despotoski的回答

这个答案说明了

  • textBottom = top + textSize
  • underlineHeight = bottom - textBottom

我使用another answer对其进行了测试,并略微修改the app以在文本下方添加下划线以用于视觉目的。 (为此我使用了mTextPaint.setUnderlineText(true);

enter image description here

红线是FontMetrics topbaselinebottom。舍入到最接近的int我们得到

  • top = -211
  • bottom = 54
  • textSize = 200

使用Nikola Despotoski的答案,这将给出

  • textBottom = (-211) + (200) = -11
  • underlineHeight = (54) - (-11) = 65

由于65大于从基线到底部的整个距离,因此它比实际下划线厚得多。因此,除非我误解答案,否则似乎是错误的。

1 个答案:

答案 0 :(得分:0)

我采用通常TextView的情况,您应该尝试将topbottomleftright交换为您的案例因此高度变为宽度。

textBottom = top + textSize将为您提供字母的底部,下划线的大小为underlineHeight = bottom - textBottom。据我们所知,toptextSize在px中给出。

enter image description here