35

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

对于测试,我使用似乎工作正常的标准字体大小。

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

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

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

4

4 回答 4

83

最简单的方法是在资源中使用与比例无关的像素sp(用户的字体大小设置。dpdip

要添加新维度,请在文件夹中创建一个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 开发者页面

于 2011-03-20T16:29:57.990 回答
6

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

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

double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight());

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

relation = relation / 250;

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

paint.setTextSize((float) (myFontSize * relation));

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

于 2017-03-10T21:58:49.170 回答
4

最简单的方法是在资源目录中使用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。

于 2011-06-22T09:44:50.073 回答
2

调用Canvas.drawText()时文本大小首先由传入的Paint对象确定,可以通过Paint.setTextSize(). 文本大小会Canvas根据画布密度自动缩放,可以使用Canvas.getDensity().

在将要在 Canvas 上绘制的绘制对象上设置文本大小时,使用单位值dporsp并让 Canvas 为您处理缩放。

于 2016-02-11T20:26:59.987 回答