2013-03-21 35 views
0

当我有一个扩展的类查看如何绘制文本到该视图的中心?要绘制文本我正在使用canvas.drawText,但由于绘制后无法移动文本,所以我不知道如何将文本居中。因此,我将如何在Android视图类如何在android视图类中居中文本?

回答

1

文本居中在精神,Maver1ck的在正确的轨道上,尽管它在实践中比这更困难一点。你需要建立一个TextPaint,做一些测量:

TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG); 
paint.setTextAlign(Paint.Align.CENTER); //Draw text from center 
//setup any text size or color attributes 

现在,以确定如何垂直居中的文本。你想集中在可见的文本?你想要中心的基线?你想要基于文本顶部还是上升中心?文字很复杂。对于简单的情况下,我们只能说,我们将底部与字体的顶部之间的中心(注意,这不是绝对顶部和底部 - 这将是上升和下降):

//Do this somewhere where you can cache it -- no need to do this on every draw. 
//onSizeChanged() is a good place. 

FontMetrics metrics = paint.getFontMetrics(); 
float height = Math.abs(metrics.top - metrics.bottom); 
float x = getWidth()/2; 
float y = (getHeight()/2) + (height/2); 

然后,在你的onDraw()

canvas.drawText("My Text", x, y, paint); 
0
Paint mPaint = new Paint(); 
mPaint.setARGB(200, 254, 0, 0); //example 
mPaint.setTextAlign(Align.CENTER); 
int positionX = (canvas.getWidth()/2); 
int positionY = (int) ((canvas.getHeight()/2) - ((mPaint.descent() + mPaint.ascent())/2)) ; 
canvas.drawText("Hello", positionX, positionY, mPaint); 
+0

但是,不会只是从文本开始位置居中不是整个文本? – user1762507 2013-03-21 00:49:26

+1

我编辑了我的答案。凌晨2点在这里,对不起 – Droidman 2013-03-21 00:51:06