2

これにより、テキストサイズが10%増加すると考えられます。

view.setTextSize( (float) (view.getTextSize() * 1.1) );

しかし、残念ながら、getset呼び出しは異なるスケールで動作します!


Galaxy Nexus(電話)でこれをチェックしてください:

float a = view.getTextSize();  // a = 44.0
view.setTextSize(a);
float b = view.getTextSize();  // b = 88.0

Nexus7(タブレット)の場合:

float a = view.getTextSize();  // a = 44.0
view.setTextSize(a);
float b = view.getTextSize();  // b = 58.6


呼び出しはset、私が与えた番号を任意の番号でスケーリングします。

呼び出して、スケール値を取得してそれを説明できるかどうかを確認しようとgetScaleX()しましたが、どちらの呼び出しも常に返されますgetTextScaleX()1.0

4

2 に答える 2

4

2つの方法は異なる単位を使用します。によって返される値getTextSize()は、実際に測定されたピクセル単位でありsetTextSize()、SPで引数を取り、デバイスに対して適切に測定されます。view.setTextSize(TypedValue.COMPLEX_UNIT_PX, a)あなたはあなたが探していることをするために使う必要があります。ドキュメントには、より多くの情報と他の単位値があります。

于 2012-11-09T17:45:39.387 に答える
4

あなたは完全に正しいです、これは設計によるものです。説明させてください:

1 つのパラメーターを指定してメソッドに値を渡すと、setTextSize()値は "dp" と同様の "sp" の単位を使用していると見なされます。どちらも値を取得し、デバイスの解像度に適した倍率 (mdpi の場合は 1.0、hdpi の場合は 1.5、xhdpi の場合は 2.0) を適用します。

TextView ドキ​​ュメントから:

デフォルトのテキスト サイズを指定された値に設定します。これは、「スケーリングされたピクセル」単位として解釈されます。このサイズは、現在の密度とユーザーのフォント サイズ設定に基づいて調整されます。

値を取得すると、常に保存されている生のピクセル値になります。テキスト サイズも生のピクセルで設定する場合は、setTextSize()2 つのパラメーターを受け取るバージョンの を使用して、単位定数を指定できるようにする必要があります。

Galaxy Nexus は xhdpi デバイス (したがって、すべての倍率は 2.0) であり、Nexus 7 は tvdpi デバイスであり、倍率は 1.333333 です。おそらく、このガイドが詳細を説明するのに役立ちます。

于 2012-11-09T17:44:50.120 に答える