2

有人会认为这会将文本大小增加 10%:

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

但不幸的是,getandset调用以不同的规模运行!


在 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

2 回答 2

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。也许本指南将有助于解释更多。

于 2012-11-09T17:44:50.120 回答
4

这两种方法使用不同的单位。返回的值getTextSize()是以实际测量的像素为单位,同时setTextSize()在 SP 中接受一个参数,然后为设备适当地测量它。你需要用view.setTextSize(TypedValue.COMPLEX_UNIT_PX, a)它来做你正在寻找的东西。该文档有更多信息和其他单位值。

于 2012-11-09T17:45:39.387 回答