1

我正在尝试以TextView编程方式设置字体大小。

txtView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);

但是当我通过

Toast.makeText(this, "txt: " + txtView.getTextSize(), Toast.LENGTH_SHORT).show();

显示Toast尺寸为“24”,比我之前设置的尺寸大 50%。

我测试了多个值并且总是得到相同的结果:

8 变成 12
10 变成 15
15 变成 22.5
等等。

我试图设置的字体总是变大 50%。

为什么会这样?我在哪里犯错?

4

4 回答 4

2

我相信这是因为以像素而不是单位TextView.getTextSize()返回文本大小,无论您首先使用什么单位类型设置文本大小。sp

此外,另一个 SO 线程讨论了如何将其转换为sp单位。

于 2014-03-17T21:22:38.403 回答
2

getTextSize()方法返回文本大小pixels。当您setTextSize()sp单位设置文本时,它会根据您的屏幕密度比进行缩放,即1.5.

于 2014-03-17T21:28:52.983 回答
0

我还没有找到关于这个 setTextSize() 问题的特定答案。所以我自己做了一些实验,发现密度在这里起着关键作用。在尝试使用 setTextSize() 之前,您需要知道设备的密度。如果你不明白,或者如果你弄错了,那么你的文本就会变得有趣和恼人。很多次我试图通过增加 1 或 2 来增加文本大小,但实际上使文本大大变小了!

经过半天的反复试验,我得出了以下解决方案,它同样适用于低、中、高密度设备。

    float size = textView.getTextSize();  // get the textsize of the TextView in pixels
    float density = getApplicationContext().getResources().getDisplayMetrics().density; // get the density of your device. Important!!
    textView.setTextSize((size/density)+1); //increase the textsize by 1
    textView.setTextSize((size/density)-1); //decrease the textsize by 1

试试看。我希望你不会失望。

于 2016-10-07T11:44:06.327 回答
-1

您可以使用 .xml 文件定义字体大小:

<resources>
    <dimen name="test">12dp</dimen>
</resources>

然后以编程方式设置它:

txtView.setTextSize(getResources().getDimension(R.dimen.test));
于 2014-03-17T21:22:14.793 回答