Android TextView setTextSize不正确地增加文字大小

这是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(); } } 

为什么是这样?

赫,混单位问题。 看起来有点不直观,但这是一个简单的修复。 默认方法setTextSize(float)假定您inputsp单位(缩放像素),而getTextSize()方法返回一个确切的像素大小。

你可以通过使用替代的setTextSize(TypedValue, float)来解决这个问题,就像这样:

 this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); 

这将确保你正在使用相同的单位。

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

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

TypedValue.COMPLEX_UNIT_PX //像素

TypedValue.COMPLEX_UNIT_SP //比例像素

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

setTextSize(TypedValue.COMPLEX_UNIT_SP,18)