对于我的 Android 游戏,我有一些调用Canvas.drawText()
.
对于测试,我使用似乎工作正常的标准字体大小。
但是,当我将分辨率提高到更高的密度时,会自动加载较大的图像,但文本现在非常小。
有没有一种简单的方法来计算文本应该绘制的大小,或者我必须手动执行此操作?
编辑:编辑我的帖子@Suragch 有什么意义?
最简单的方法是在资源中使用与比例无关的像素sp
(用户的字体大小设置。dp
dip
要添加新维度,请在文件夹中创建一个dimens.xml
文件res/values
并输入以下代码以添加名称为 的新维度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 可以很好地使用可以适应任何屏幕尺寸的常规字体大小,因为您已经在计算画布中的像素尺寸。
最简单的方法是在资源目录中使用scale-independent pixel (sp)
或的单位定义字体大小density-independent pixel (dp)
。然后使用获取文本大小
int scaledSize = getResources().getDimensionPixelSize(R.dimen.font_size);
mTextView.setTextSize(scaledSize);
这将根据当前屏幕密度/分辨率和用户的字体大小设置适当地缩放文本大小。
如何在资源目录中定义字体大小?
dimens.xml
在文件夹中创建一个名为res->values
. 然后复制以下代码。
<resources>
<dimen name="font_size">25sp</dimen> // sp or dp accordingly
</resources>
标签的name
属性<dimen>
将用作资源 ID。
调用Canvas.drawText()
时文本大小首先由传入的Paint
对象确定,可以通过Paint.setTextSize()
. 文本大小会Canvas
根据画布密度自动缩放,可以使用Canvas.getDensity()
.
在将要在 Canvas 上绘制的绘制对象上设置文本大小时,使用单位值dp
orsp
并让 Canvas 为您处理缩放。