安卓TextView setTextSize 不正确地增加了文字大小

53

这是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个回答

162

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

您可以通过使用备用方法setTextSize(TypedValue, float)来解决这个问题,如下所示:

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
这将确保您使用相同的单位进行操作。

23

setTextSize()getTextSize()使用不同的单位。传递给setTextSize()的参数是独立于像素密度的"缩放像素",而getTextSize()返回普通像素。


5
哈哈,我以为这只会发生在我身上!送你一个赞,因为你的回答比我的更有用... - Reuben Scratton

5

使用像下面这样的 TypedValue 传递大小单元:

TypedValue.COMPLEX_UNIT_PX // 像素

TypedValue.COMPLEX_UNIT_SP // 缩放像素

TypedValue.COMPLEX_UNIT_DIP // 设备独立像素

setTextSize(TypedValue.COMPLEX_UNIT_SP, 18)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接