我正在尝试以编程方式设置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%。
为什么会这样?我在哪里弄错了?
答案 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));