我正在开发Android 2.2应用程序。
我正在使用此方法在视图中绘制文本:
public void draw(Canvas c)
{
p.setColor(Color.WHITE);
if(name != null)
c.drawText(name, getLeft(), getTop(), p);
}
如何获取名称文字的高度和宽度?
如果我这样做(p是一个Paint对象):
p.getTextBounds(name, 0, name.length(), bounds);
我得到了name = 'Loading', bounds = Rect(1, -10 - 42, 3);
。
我不知道为什么会得到这个奇怪的矩形。
有任何线索吗?
这是我可能的解决方案:
public class MyView extends ARSphericalView
{
public String name;
public MyView(Context ctx)
{
super(ctx);
inclination = 0;
}
public void draw(Canvas c)
{
/*
p.setColor(Color.WHITE);
if(name != null)
c.drawText(name, getLeft(), getTop(), p);
*/
p.setColor(Color.BLACK);
if(name != null)
{
Rect bounds = new Rect();
c.drawText(name, getLeft(), getTop(), p);
setBackgroundColor(Color.WHITE);
p.getTextBounds(name, 0, name.length(), bounds);
c.drawRect(bounds, p);
}
}
}
但是,它不起作用。我得到那个奇怪的矩形。
答案 0 :(得分:28)
文本大小是从其基线开始测量的,并且具有上升(向上,如此-y)和下降(向下,y)。 rect(-10)中的第一个y值是上升,第二个是下降(3)。文字宽度为41(42-1)。因此高度为|上升| + |血统|是10 + 3 = 13;
同样地,p.getFontMetrics()
具有顶部和底部属性,这些属性描述了您使用的字体的最高上升和下降。如果您想计算文字的高度,那么Math.abs(p.ascent) + Math.abs(p.descent)
您还可以使用p.measureText()
来衡量文字的宽度。
答案 1 :(得分:0)
您可以使用Paint.setTextSize()
设置文字大小,然后将其绘制在Canvas
。