有人会认为这会使文字大小增加10%:
view.setTextSize( (float) (view.getTextSize() * 1.1) );
但不幸的是,get
和set
来电以不同的比例运作!
在Galaxy Nexus(手机)上查看这个:
float a = view.getTextSize(); // a = 44.0
view.setTextSize(a);
float b = view.getTextSize(); // b = 88.0
在Nexus7(平板电脑)上:
float a = view.getTextSize(); // a = 44.0
view.setTextSize(a);
float b = view.getTextSize(); // b = 58.6
set
调用会将我给它的数字缩放一些任意数字。
我尝试调用getScaleX()
和getTextScaleX()
来查看是否可以检索缩放值并对其进行说明,但这两个调用始终都会返回1.0
答案 0 :(得分:4)
你是绝对正确的,这是通过设计发生的。让我解释一下:
当您使用单个参数将值传递到setTextSize()
方法时,它假定该值使用“sp”单位,类似于“dp”。两者都取值并应用适合设备分辨率的比例因子(mdpi为1.0,hdpi为1.5,xhdpi为2.0)。
从TextView文档:
将默认文本大小设置为给定值,解释为“缩放像素”单位。此大小根据当前密度和用户字体大小首选项进行调整。
当您返回值时,它始终存储在原始像素值中。如果您还想以原始像素设置文本大小,则应使用带有两个参数的setTextSize()
版本,以便您可以指定单位常量。
Galaxy Nexus是一款xhdpi设备(所有比例因子均为2.0),Nexus 7是一款tvdpi设备,其比例因子为1.333333。也许this guide将有助于解释更多。
答案 1 :(得分:4)
这两种方法使用不同的单位。 getTextSize()
返回的值是实际测量的像素,而setTextSize()
在SP中获取参数,然后为设备适当地测量它。您需要使用view.setTextSize(TypedValue.COMPLEX_UNIT_PX, a)
来执行您要查找的内容。 documentation包含更多信息和其他单位值。