我试图在画布上绘制一个字符串。我需要在屏幕上水平居中字符串,并且字符串是动态的,因为它增加了更多的字符(最多7个字符)。如何以像素为单位获取String的长度,以便我可以进行一些计算使其居中?
答案 0 :(得分:0)
对于文字,请使用 sp 而不是像素,并将文本视图放在其xml文件中。
机器人:比重="中心"
答案 1 :(得分:0)
我为此使用了StaticLayout。如果您将宽度设置为画布的大小并将对齐方式设置为居中,那么您不应该自己进行任何计算。
只要文本发生变化并在View的onSizedChanged函数中调用此函数:
StaticLayout sl;
private void initText(){
TextPaint paint = new TextPaint();
paint.setTextSize(16);
paint.setColor(0xFFFFFFFF);
sl = new StaticLayout("My String", paint, myCanvasWidth, Layout.Alignment.ALIGN_CENTER, 1F, 0F, false);
}
然后在onDraw:
protected void onDraw(Canvas canvas)
{
sl.draw(canvas);
}
如果您需要垂直放置文字,请使用以下内容:
int save = canvas.save();
canvas.translate(0, yOffset);
sl.draw(canvas);
canvas.restoreToCount(save);
如果你真的需要知道文字的宽度,那么:
sl.getWidth();
答案 2 :(得分:-1)
Android有方法
public float measureText (String text)
在API级别1中添加
返回文本的宽度
参数text要测量的文本。不能为空。
返回*文本的宽度
答案是:
float textPixelWidth = paintText.measureText(strText);