51

这是 TextView 的扩展。getTextSize()并且setTextSize()没有被覆盖,我不扩展这些方法。在 1.6 中编程,API 级别 4。

这段代码中的循环每次迭代都会导致 size 乘以 1.5,例如,如果 size 最初从 读取 200 getTextSize,然后setTextSize(size)被调用,getTextSize再次调用会读回 300。

public void shrinkTest() {
    float size = this.getTextSize(); 
    while (size > 8) {
        this.setTextSize(size);
        size = this.getTextSize();
    }
}

为什么是这样?

4

3 回答 3

158

呵呵,混合单位问题。似乎有点违反直觉,但它很容易解决。默认方法setTextSize(float)假定您输入的是sp单位(缩放像素),而该getTextSize()方法返回精确的像素大小。

您可以通过使用 alternate 来解决此问题setTextSize(TypedValue, float),如下所示:

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);

这将确保您使用相同的单位。

于 2011-02-17T17:34:26.697 回答
23

setTextSize()getTextSize()与不同的单位合作。set() 的参数是与密度无关的“缩放像素”,而 get() 返回普通的旧像素。

于 2011-02-17T17:33:12.627 回答
5

使用 TypedValue 传递具有大小的单位,如下所示:

TypedValue.COMPLEX_UNIT_PX //像素

TypedValue.COMPLEX_UNIT_SP //缩放像素

TypedValue.COMPLEX_UNIT_DIP //设备独立像素

setTextSize(TypedValue.COMPLEX_UNIT_SP, 18)

于 2016-06-23T10:14:29.283 回答