我目前正在使用以下方法将一些文本绘制到 SurfaceView:
canvas.drawText("someText", 0, 0, paint);
但是,如果文本超出屏幕宽度怎么办?是否可以定义一个可以绘制文本的区域?
所以现在当字符串的宽度超过矩形宽度时,文本将被格式化以适合上面的文本等等,例如。
"sometext"
"text carried"
"on"
我目前正在使用以下方法将一些文本绘制到 SurfaceView:
canvas.drawText("someText", 0, 0, paint);
但是,如果文本超出屏幕宽度怎么办?是否可以定义一个可以绘制文本的区域?
所以现在当字符串的宽度超过矩形宽度时,文本将被格式化以适合上面的文本等等,例如。
"sometext"
"text carried"
"on"
基于这个答案,我相信这就是Layout子类的用途。根据文档:
管理屏幕上可视元素中的文本布局的基类。
对于将要编辑的文本,请使用 DynamicLayout,它将随着文本的变化而更新。对于不会更改的文本,请使用 StaticLayout。
每个子类都有一个注释:
小部件使用它来控制文本布局。除非您正在实现自己的小部件或自定义显示对象,否则您不需要直接使用此类,或者想直接调用 Canvas.drawText()。
这听起来和你正在做的完全一样。
它基本上是一个替代品canvas.drawText()
。它可以以这种方式使用:
TextPaint tPaint = new TextPaint(paint);
StaticLayout sLayout = new StaticLayout(sText, tPaint, mWidth, widthToFill, Layout.Alignment.ALIGN_CENTER, 1.2f, 1.0f, false);
canvas.save();
canvas.translate(posX, posY);
sLayout.draw(canvas);
canvas.restore();