当前位置: 首页 > 面试题库 >

如何在Java中绘制垂直居中的字符串?

强阳曜
2023-03-14
问题内容

我知道这是一个简单的概念,但是我在字体指标方面苦苦挣扎。水平居中不太困难,但垂直居中似乎有点困难。

我试过以各种组合使用FontMetrics的getAscent,getLeading,getXXXX方法,但是无论我尝试过什么,文本总是偏离几个像素。有没有一种方法可以测量文本的确切高度,以使其准确居中。


问题答案:

注意,您 确实 需要仔细考虑垂直居中的含义。

字体呈现在基线上,沿着文本的底部延伸。垂直空间分配如下:

---
 ^
 |  leading
 |
 -- 
 ^              Y     Y
 |               Y   Y
 |                Y Y
 |  ascent         Y     y     y 
 |                 Y      y   y
 |                 Y       y y
 -- baseline ______Y________y_________
 |                         y                
 v  descent              yy
 --

开头只是字体在行之间的建议间距。为了使两点之间垂直居中,应该忽略引导(引导,顺便说一句,而不是引导;在一般的印刷术中,是/是在印刷版中的行之间插入了引线间距)。

因此,为了使文本的上升和下降居中,您需要

baseline=(top+((bottom+1-top)/2) - ((ascent + descent)/2) + ascent;

如果没有最后的“ +上升”,您将处于字体顶部的位置;因此,从顶部到基线添加上升。

另外,请注意,字体高度应包含前导,但某些字体不包含前导,并且由于舍入差异,字体高度可能不完全相等(前导+上升+下降)。



 类似资料:
  • 本文向大家介绍如何垂直居中` `?相关面试题,主要包含被问及如何垂直居中` `?时的应答技巧和注意事项,需要的朋友参考一下 使用协助元素(这里是i),作为img的相邻元素,同为inline-block的两元素相邻时增加vertical-align: middle

  • 问题内容: 我正在尝试制作一个小的用户名和密码输入框。 我想问一下,如何垂直对齐div? 我所拥有的是: 如何使ID为Username和Form的div垂直对齐中心?我试着把: 在CSS中用于ID为Login的div,但似乎不起作用。任何帮助,将不胜感激。 问题答案: 现代浏览器中最好的方法是使用flexbox: 某些浏览器将需要供应商前缀。对于不支持Flexbox的较旧的浏览器(例如IE9及更低

  • 本文向大家介绍如何实现垂直居中?相关面试题,主要包含被问及如何实现垂直居中?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 父元素固定宽高,利用定位及设置子元素margin值为自身的一半。 父元素固定宽高,子元素设置position: absolute,margin:auto平均分配margin css3属性transform。子元素设置position: absolute; left:

  • 问题内容: 编码: 如现在所呈现的,跨度与div的左下角对齐。 问题答案: 请参阅我关于理解垂直对齐的文章。在讨论的最后,有多种技术可以实现您想要的。 (超简短摘要:或者将子级的行高设置为等于容器的高度,或者将子级的高度设置为在容器上并将子级绝对定位为,其中YYY为子级已知高度的一半。)

  • 问题内容: 我怎么能垂直居中内的? 到目前为止,我的代码: 我已经尝试过“ top:50%”;和“ vertical-align:middle”;没有成功 编辑: 好的,所以已经讨论了很多。我也许已经开始了另一场小型的火焰战争。但是为了论证,那我该如何用一个表呢?到目前为止,我已经将CSS用于其他所有内容,所以这并不是说我没有尝试采用“良好做法”。 编辑: 内部div没有固定的高度 问题答案: 简

  • 给定一个信号的时间表示图,如何画出相应的时间指标线? 具体来说,给定一个时间索引范围为0到2.6(s)的信号图,我想画垂直红线,指示列表的相应时间索引,我该怎么做?