对于我的Android游戏,我打电话给Canvas.drawText()
。
为了进行测试,我使用的标准字体大小似乎正常。
但是,当我将分辨率提高到更高的密度时,会自动加载较大的图像,但文本现在非常小。
是否有一种简单的方法可以计算应该绘制文本的大小,还是我必须手动执行此操作?
编辑:editing my post @Suragch是什么意思?
答案 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上绘制的绘画对象上设置文本大小时,使用单位值dp
或sp
并让Canvas为您处理缩放。
答案 3 :(得分:1)
您可以使用简单的数学运算自己完成:
您需要计算一个关系,该关系可以为任何画布大小绘制相同大小的文本,因此请使用实际的画布大小,如下所示:
double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight());
但是这个数字太大了,所以把它除以一个适合你需要的数字,比方说250:
relation = relation / 250;
现在您可以像这样设置文字大小:
paint.setTextSize((float) (myFontSize * relation));
您没有任何必要的除数关系,但在这种情况下,您必须为变量myFontSize
使用非常小的字体大小。对我来说250工作正常,使用可调整到任何屏幕尺寸的常规字体大小,因为您已经从画布中计算了像素尺寸。