51

これはTextViewの拡張です。getTextSize()オーバーライドさsetTextSize()れないので、これらのメソッドを拡張しません。1.6でのプログラミング、APIレベル4。

このコードのループにより、反復するたびにサイズが1.5倍になります。たとえば、サイズが最初にから200を読み取った場合getTextSize、次にsetTextSize(size)呼び出され、getTextSize再度呼び出されると300が読み取られます。

public void shrinkTest() {
    float size = this.getTextSize(); 
    while (size > 8) {
        this.setTextSize(size);
        size = this.getTextSize();
    }
}

どうしてこれなの?

4

3 に答える 3

158

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

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

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);

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

于 2011-02-17T17:34:26.697 に答える
23

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

于 2011-02-17T17:33:12.627 に答える
5

以下のように TypedValue を使用してサイズの単位を渡します。

TypedValue.COMPLEX_UNIT_PX //ピクセル

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

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

setTextSize(TypedValue.COMPLEX_UNIT_SP, 18)

于 2016-06-23T10:14:29.283 に答える