Android TextView getTextSize()它包括下行器,上升器

时间:2012-12-27 23:31:19

标签: android fonts textview font-size

我无法找到有关如何测量Textview中的getTextSize()的任何地方。从视觉测试看,它似乎不包括下降器,但似乎包括上升器。它似乎也不是从基线开始。

http://en.wikipedia.org/wiki/Descender

这是最接近它的提及,但谷歌的罗曼盖伊忽略了这部分问题。

http://www.mail-archive.com/android-developers@googlegroups.com/msg08514.html

因为我需要这个,因为我正在使用Compound Drawables,我需要能够将drawable与不同设备上的文本对齐。

以下是我用来测试复合可绘制圆形的代码

的代码
tvData.setTextSize(TypedValue.COMPLEX_UNIT_PX, 100);
tvData.setText("agB5ãÂ");

int size = (int)tvData.getTextSize();
Drawable img = getResources().getDrawable(R.drawable.circle_white_full_72 ).mutate();
img.setBounds( 0 , 0 , size , size);
tvData.setCompoundDrawables( null, null, img, null );

结果如下 http://i.imgur.com/zUEzB.png

你可以看到它似乎没有使用下降器和上升器。

如果其他人想要测试,这是可绘制的图像 http://i.imgur.com/Yhf8b.png

使用

将图像更改为文本大小的80%时
int size = (int)tvData.getTextSize() *80/100;

这是结果,图像转换在100%图像的顶部。也许setCompoundrawables正在做它自己的缩放

enter image description here

我尝试测量字体和drawable的中点,然后关闭。这是一个突出显示它的图像enter image description here

最后我将可绘制的50像素向左移动,然后测量输出,它是字体文本基线到基线的一半高度,因为setTextSize设置为100px。

Android必须使用其他布局来缩放和定位复合drawable。也许我应该为此创建另一个问题。 这是一个突出基线到基线的图像。 enter image description here

1 个答案:

答案 0 :(得分:3)

从某些光测试来看,它似乎是从上升到下降(文字大小=下降 - 上升)。使用TextPaint进行了一些调试以验证,并且只是更具体一点,我做了:

Paint.FontMetricsInt metrics;
for(int i = 1; i < 100; i++) {
    mTextPaint.setTextSize(i);
    metrics = mTextPaint.getFontMetricsInt();
    if((metrics.descent - metrics.ascent) != i) Log.v("type", "Not equal");
}

每个值都是如此。