我在任何地方都找不到关于如何测量textview中的getTextSize()的说明。从视觉测试来看,它似乎不包括下降者,但似乎包括上升者。它似乎也不是完全从基线开始的。
http://en.wikipedia.org/wiki/Descender
这是最近一次提到它,但来自谷歌的Romain Guy忽略了这部分问题。
http://www.mail-archive.com/[email protected]/msg08514.html
因为我需要这个,因为我正在使用复合绘图,我需要能够在不同的设备上对齐文本的绘图。
这是我用来测试复合图的代码,它可以画一个接触边缘的圆。
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/Yhf8b.png
将图像更改为文本大小的80%时,使用
int size = (int)tvData.getTextSize() *80/100;
这是结果,图像转置在100%图像之上。也许setcompoundrables是在做自己的扩展
我试着测量字体的中点和可画性,但它关闭了。这是一张突出显示它的图片
最后,我将可绘制的50像素移到左边,然后测量输出,它是字体文本基线到基线高度的一半,因为settextsize设置为100px。
android必须使用其他布局来缩放和定位复合绘图。也许我应该再问一个问题。
这是一个突出显示基线到基线的图像。
最佳答案
从一些光线测试来看,它似乎是从上升到下降(文本大小=下降-上升)。用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");
}
每一个值都是真的。