web-dev-qa-db-ja.com

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

どうしてこれなの?

46
Nathan Fig

へえ、混合ユニットの問題。少し直感に反しているように見えますが、簡単に修正できます。デフォルトのメソッドsetTextSize(float)は、sp単位(スケーリングされたピクセル)を入力していると仮定しますが、getTextSize()メソッドは正確なピクセルサイズを返します。

次のように、代替のsetTextSize(TypedValue, float)を使用してこれを修正できます。

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);

これにより、同じユニットで作業していることが確認されます。

148
kcoppock

setTextSize()getTextSize()は異なるユニットで動作します。 set()のパラメーターは密度に依存しない「スケーリングされたピクセル」ですが、get()は単純な古いピクセルを返します。

21
Reuben Scratton

以下のようなTypedValueを使用してサイズのユニットを渡します。

TypedValue.COMPLEX_UNIT_PX //ピクセル

TypedValue.COMPLEX_UNIT_SP //スケーリングされたピクセル

TypedValue.COMPLEX_UNIT_DIP //デバイスに依存しないピクセル

setTextSize(TypedValue.COMPLEX_UNIT_SP、18)

5
user3763203