Android TextView setTextSize错误地增加了文本大小

时间:2011-02-17 17:28:08

标签: android textview pixels pixelformat

这是TextView的扩展。 getTextSize()setTextSize()未被覆盖,我不会扩展这些方法。编程1.6,API级别4。

此代码中的循环导致每次迭代时大小乘以1.5,例如如果大小最初从getTextSize读取200,则调用setTextSize(size),再次调用getTextSize会回读300。

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

为什么会这样?

3 个答案:

答案 0 :(得分:147)

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

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

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);

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

答案 1 :(得分:21)

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

答案 2 :(得分:5)

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

TypedValue.COMPLEX_UNIT_PX //像素

TypedValue.COMPLEX_UNIT_SP //缩放像素

TypedValue.COMPLEX_UNIT_DIP //设备无关像素

setTextSize(TypedValue.COMPLEX_UNIT_SP,18)