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

Nat*_*Fig 46 android pixels textview pixelformat

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

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

public void shrinkTest() {
    float size = this.getTextSize(); 
    while (size > 8) {
        this.setTextSize(size);
        size = this.getTextSize();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

kco*_*ock 148

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

你可以通过使用替换来解决这个问题setTextSize(TypedValue, float),如下所示:

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
Run Code Online (Sandbox Code Playgroud)

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


Reu*_*ton 21

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

  • 打败了拳.:P (4认同)
  • 哈,以为只发生在我身上!有一个upvote你的稍微有用的答案... (4认同)

小智 5

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

TypedValue.COMPLEX_UNIT_PX //像素

TypedValue.COMPLEX_UNIT_SP //缩放的像素

TypedValue.COMPLEX_UNIT_DIP //与设备无关的像素

setTextSize(TypedValue.COMPLEX_UNIT_SP,18)


归档时间:

查看次数:

31412 次

最近记录:

9 年,2 月 前