参见英文答案 > TextView.setTextSize behaves abnormally – How to set text size of textview dynamically for different screens 7个
这是TextView的扩展. getTextSize()和setTextSize()没有被覆盖,我没有扩展那些方法.编程1.6,API级别4.
此代码中的循环导致每次迭代时大小乘以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);
这将确保您使用相同的单位.