动态地将TextView TextSize增加10%

时间:2012-11-09 17:38:11

标签: android textview scale

有人会认为这会使文字大小增加10%:

view.setTextSize( (float) (view.getTextSize() * 1.1) );

但不幸的是,getset来电以不同的比例运作!


在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

2 个答案:

答案 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包含更多信息和其他单位值。