2012-11-09 127 views
2

人们会认为这会增加10%的文字大小:由10%增加的TextView TEXTSIZE动态

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

回答

4

这两种方法使用不同的单位。由getTextSize()返回的值以实际测量的像素为单位,而setTextSize()在SP中采用参数,然后对设备进行适当测量。你需要使用view.setTextSize(TypedValue.COMPLEX_UNIT_PX, a)来做你想要的。 documentation有更多信息和其他单位值。

4

你是绝对正确的,这是由设计发生。让我来解释:

当你传递一个值到setTextSize()方法有一个参数,它假定值是使用“SP”,这是类似于“DP”的单位。两者都取值并应用适合设备分辨率的比例因子(1.0代表mdpi,1.5代表hdpi,2.0代表xhdpi)。

从TextView的文档:

设置默认文本大小为给定值,解释为“缩放像素”单位。此大小根据当前密度和用户字体大小首选项进行调整。

当你得到的值返回时,它总是存储在原始像素值中。如果要以原始像素设置文本大小,则应使用带有两个参数的版本setTextSize(),以便您可以指定单位常量。

Galaxy Nexus是xhdpi设备(因此所有比例因子均为2.0),Nexus 7是一款tvdpi设备,其比例因子为1.333333。也许this guide将有助于解释更多。

+0

啊,好的。这更详细地解释了行为。谢谢 – Matt