繁体   English   中英

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

[英]Android: Canvas.drawText() text size on different screen resolutions

对于我的Android游戏,我对Canvas.drawText()进行了一些调用。

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

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

是否有一种简单的方法可以计算应以什么尺寸绘制文本,或者我必须手动执行此操作?

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

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

要添加新维度,请在res/values文件夹中创建dimens.xml文件,然后输入以下代码以添加名为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创建一个名为dimens.xml的文件。 然后复制以下代码。

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

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

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

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

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

但是这个数字太大了,因此将其除以适合您需求的数字,可以说250:

relation = relation / 250;

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM