【问题标题】:Android TextView setTextSize incorrectly increases text size [duplicate]Android TextView setTextSize 错误地增加了文本大小[重复]
【发布时间】:2011-06-29 06:36:58
【问题描述】:

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

此代码中的循环每次迭代都会导致 size 乘以 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();
    }
}

这是为什么?

【问题讨论】:

    标签: android textview pixels pixelformat


    【解决方案1】:

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

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

    this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 哈,以为只有我才发生过!为您稍微有用的答案投票...
      【解决方案3】:

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

      TypedValue.COMPLEX_UNIT_PX //像素

      TypedValue.COMPLEX_UNIT_SP //缩放像素

      TypedValue.COMPLEX_UNIT_DIP //设备独立像素

      setTextSize(TypedValue.COMPLEX_UNIT_SP, 18)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-07
        • 2017-06-11
        • 1970-01-01
        • 2018-06-28
        • 1970-01-01
        • 2019-05-13
        • 2023-03-24
        相关资源
        最近更新 更多