これは、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)
は、sp
単位(スケーリングされたピクセル)を入力していると仮定しますが、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)