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

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

为了testing,我使用标准的字体大小似乎工作正常。

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

是否有一个简单的方法来计算文本应绘制在什么尺寸或我必然手动做到这一点?

编辑: 编辑我的post @Suragch是什么?

Solutions Collecting From Web of "Android:Canvas.drawText()文本大小不同的屏幕分辨率"

最简单的方法是在资源中使用与尺度无关的像素( sp )单位来定义字体大小 – 这个单位就像密度独立像素( dpdip ),因为它考虑了屏幕密度,但是也需要考虑到用户的字体大小设置。

要添加新维度,请在res/values文件夹中创build一个dimens.xml文件,然后input以下代码以添加名称为myFontSize的新维度:

 <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="myFontSize">20sp</dimen> </resources> 

然后,您可以使用应用程序中的文本大小

 int scaledSize = getResources().getDimensionPixelSize(R.dimen.myFontSize); 

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

有关更多信息,请参阅更多资源上的Android开发者页面 。

最简单的方法是在您的资源目录中定义您的字体大小的单位与scale-independent pixel (sp)density-independent pixel (dp) 。 然后使用文本大小

 int scaledSize = getResources().getDimensionPixelSize(R.dimen.font_size); mTextView.setTextSize(scaledSize); 

这将根据当前的屏幕密度/分辨率和用户的字体大小设置适当地缩放文本大小。

如何在资源目录中定义字体大小?

在文件夹dimens.xml res->values创build一个名为dimens.xml的文件。 然后复制下面的代码。

 <resources> <dimen name="font_size">25sp</dimen> // sp or dp accordingly </resources> 

标记<dimen>name属性将被用作资源ID。

当调用Canvas.drawText() ,文本大小首先由在Paint对象中传递来确定,可以通过Paint.setTextSize()来设置。 Canvas根据canvas密度自动缩放文字大小,这可以通过Canvas.getDensity()来find。

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

你可以使用简单的math运算来完成它:

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

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

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

 relation = relation / 250; 

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

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

您不必通过任何数字进行必要的分割关系,但是在这种情况下,您将不得不使用非常小的字体大小作为variablesmyFontSize 。 对于我来说,250个作品可以很好地使用常规字体大小,可以调整到任何屏幕大小,因为您已经在计算canvas中的像素尺寸。