以编程方式设置后获得奇怪的字体大小

时间:2014-03-17 21:15:24

标签: android textview text-size screen-density

我正在尝试以编程方式设置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 个答案:

答案 0 :(得分:2)

我认为这是因为TextView.getTextSize()像素而不是sp单位返回文字大小,无论您在第一次使用哪种单位类型设置文字大小的地方。

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

答案 1 :(得分:2)

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

答案 2 :(得分: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

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

答案 3 :(得分:-1)

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

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

然后以编程方式设置它:

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