This question already has answers here:
TextView.setTextSize behaves abnormally - How to set text size of textview dynamically for different screens

(8个答案)


4年前关闭。




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

这段代码中的循环会导致每次迭代时将大小乘以1.5,例如如果size最初从getTextSize读取200,则调用setTextSize(size),再次调用getTextSize读回300。
public void shrinkTest() {
    float size = this.getTextSize();
    while (size > 8) {
        this.setTextSize(size);
        size = this.getTextSize();
    }
}

为什么是这样?

最佳答案

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

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

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);

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

09-30 23:20