这是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();
}
}
为什么会这样?
答案 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)