【问题标题】:Getting weird font size after setting it programmatically以编程方式设置后字体大小变得奇怪
【发布时间】:2014-03-17 21:15:24
【问题描述】:

我正在尝试以编程方式设置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%。

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

【问题讨论】:

    标签: android textview text-size screen-density


    【解决方案1】:

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

    此外,another SO thread 讨论了如何将其转换为 sp 单位。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我还没有找到关于这个 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
        

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

        【讨论】:

          【解决方案4】:

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

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

          然后以编程方式设置:

          txtView.setTextSize(getResources().getDimension(R.dimen.test));
          

          【讨论】:

            猜你喜欢
            • 2023-03-07
            • 1970-01-01
            • 1970-01-01
            • 2013-07-08
            • 1970-01-01
            • 2016-02-01
            • 1970-01-01
            • 2015-12-09
            • 1970-01-01
            相关资源
            最近更新 更多