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

时间:2011-03-20 11:52:56

标签: android text size resolution drawtext

对于我的Android游戏,我打电话给Canvas.drawText()

为了进行测试,我使用的标准字体大小似乎正常。

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

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

编辑:editing my post @Suragch是什么意思?

4 个答案:

答案 0 :(得分:77)

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

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

myFontSize

然后,您可以使用

获取应用程序中的文本大小
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="myFontSize">20sp</dimen>
</resources>

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

有关详细信息,请参阅Android Developers page on More Resources

答案 1 :(得分: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的{​​{1}}属性将用作资源ID。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

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

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

relation = relation / 250;

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

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

您没有任何必要的除数关系,但在这种情况下,您必须为变量myFontSize使用非常小的字体大小。对我来说250工作正常,使用可调整到任何屏幕尺寸的常规字体大小,因为您已经从画布中计算了像素尺寸。