首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android视图类中居中显示文本?

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

Stack Overflow用户
提问于 2013-03-21 08:37:16
回答 2查看 1.1K关注 0票数 2

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-21 08:50:18

在精神上,Maver1ck是在正确的轨道上,尽管它在实践中要困难一点。您需要设置一个TextPaint并进行一些测量:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
//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()

代码语言:javascript
复制
canvas.drawText("My Text", x, y, paint);
票数 2
EN

Stack Overflow用户

发布于 2013-03-21 08:43:25

代码语言:javascript
复制
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);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15537420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档