对于我的Android游戏,我需要调用Canvas.drawText()
。
在测试时,我使用标准字体大小,看起来效果很好。
然而,当我将分辨率提高到更高的密度时,大图像会自动加载,但文本现在非常小。
有没有一种简单的方法来计算应该绘制文本的大小,或者我必须手动完成这个过程?
编辑:@Suragch,编辑我的帖子的目的是什么?
对于我的Android游戏,我需要调用Canvas.drawText()
。
在测试时,我使用标准字体大小,看起来效果很好。
然而,当我将分辨率提高到更高的密度时,大图像会自动加载,但文本现在非常小。
有没有一种简单的方法来计算应该绘制文本的大小,或者我必须手动完成这个过程?
编辑:@Suragch,编辑我的帖子的目的是什么?
最简单的方法是使用与屏幕密度无关的像素单元(sp
)在资源中定义字体大小。这个单位类似于密度无关像素(dp
或dip
),因为它考虑了屏幕密度,同时还考虑了用户的字体大小设置。
要添加新的尺寸,请在res/values
文件夹中创建一个dimens.xml
文件,并输入以下代码以添加一个名为myFontSize
的新尺寸:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="myFontSize">20sp</dimen>
</resources>
您可以使用以下方法在应用程序中获取文本大小:
int scaledSize = getResources().getDimensionPixelSize(R.dimen.myFontSize);
生成的大小将正确缩放以考虑当前屏幕密度和字体大小设置。
有关更多信息,请参见Android开发者文档资源页面。
您可以通过简单的数学运算自行完成:
您需要计算一种关系,以便使您的文本在任何画布大小下都保持相同的大小。因此,请使用实际画布大小,例如:
double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight());
但是这个数字太大了,所以将其除以一个适合您需求的数字,比如说250:
relation = relation / 250;
paint.setTextSize((float) (myFontSize * relation));
您不必将关系分为任何数量,但在这种情况下,您将不得不使用非常小的字体大小来设置变量 myFontSize
。 对于我来说,250适用于使用普通字体大小,这些字体大小会自动调整到任何屏幕尺寸,因为您已经考虑了画布的像素尺寸。
最简单的方法是在您的资源目录中使用 可缩放独立像素 (sp)
或者 密度独立像素 (dp)
单位来定义字体大小。然后通过以下方式获取文本大小:
int scaledSize = getResources().getDimensionPixelSize(R.dimen.font_size);
mTextView.setTextSize(scaledSize);
这将根据当前屏幕密度/分辨率和用户的字体大小设置适当地缩放文本大小。
如何在资源目录中定义字体大小?
在文件夹res->values
中创建一个名为dimens.xml
的文件。然后复制以下代码。
<resources>
<dimen name="font_size">25sp</dimen> // sp or dp accordingly
</resources>
< p >标签中的< code > name < / code >属性将被用作资源ID。< / p >
Canvas.drawText()
时,文本大小首先由传入的Paint
对象确定,可以通过Paint.setTextSize()
设置。文本大小会根据画布密度自动缩放,可以使用Canvas.getDensity()
找到画布密度。dp
或sp
作为单位值,并让Canvas为您处理缩放。