[英]Android: Canvas.drawText() text size on different screen resolutions
最简单的方法是使用与比例无关的像素( sp
)单位定义资源中的字体大小-该单位类似于密度无关的像素( dp
或dip
),因为它考虑了屏幕密度,但同时也考虑了考虑到用户的字体大小设置。
要添加新维度,请在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上绘制的绘画对象上设置文本大小时,请使用dp
或sp
的单位值,并让Canvas为您处理缩放比例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.