如何在android视图类中居中文本?

时间:2013-03-21 00:37:16

标签: android android-view

当我有一个扩展View的类时,如何将文本绘制到该视图的中心?要绘制文本我正在使用canvas.drawText,但由于在绘制文本后无法移动文本,因此我不确定如何将文本置于中心位置。那么我如何将文本置于android视图类中

2 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:2)

在精神上,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);