Android:Canvas.drawText()文本大小在不同的屏幕分辨率上

twi*_*wig 33 size android text resolution drawtext

对于我的Android游戏,我有一些电话Canvas.drawText().

为了测试,我使用标准的字体大小似乎工作正常.

但是,当我将分辨率提高到更高的密度时,会自动加载较大的图像,但文本现在非常小.

有没有一种简单的方法来计算应该绘制文本的大小,还是我必须手动执行此操作?

编辑:编辑 @Suragch的帖子有什么意义?

Jos*_*arl 79

最简单的方法是使用与比例无关的像素(sp)来定义资源中的字体大小- 此单位就像密度无关的像素(dpdip),因为它考虑了屏幕密度,但它也考虑了用户的字体大小设置.

要添加新维度dimens.xml,请在res/values文件夹中创建一个文件,然后输入以下代码以添加名称为的新维度myFontSize:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="myFontSize">20sp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用应用程序获取文本大小

int scaledSize = getResources().getDimensionPixelSize(R.dimen.myFontSize);
Run Code Online (Sandbox Code Playgroud)

生成的大小将正确缩放,以考虑当前的屏幕密度和字体大小设置.

有关更多信息,请参阅更多资源上Android开发人员页面.

  • @Haraldo:它将"自动缩放". (2认同)

Cam*_*gón 5

您可以使用简单的数学运算自行完成:

您需要计算一个关系,该关系可以为任何画布大小绘制相同大小的文本,因此请使用实际画布大小,如下所示:

double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight());
Run Code Online (Sandbox Code Playgroud)

但是这个数字太大了,所以将它除以适合您需要的一个,比如说 250:

relation = relation / 250;
Run Code Online (Sandbox Code Playgroud)

现在您可以像这样设置文本大小:

paint.setTextSize((float) (myFontSize * relation));
Run Code Online (Sandbox Code Playgroud)

您不必将关系除以任何数字,但在这种情况下,您将不得不为变量使用非常小的字体大小myFontSize。对我来说,250 可以很好地使用可以适应任何屏幕尺寸的常规字体大小,因为您已经在计算画布中的像素尺寸。