1

dimen リソース属性がわかりません。

value-normal、value-large、value-xlarge の 3 つの値フォルダーがあります。

titlesize を通常の場合は 20、大の場合は 25、特大の場合は 30 と定義しました。これが私の通常の値のファイルです。

<resources>
    <dimen name="titleSize">20sp</dimen>
</resources>

しかし、この値を取得しようとすると

Resources r = getResources();
tvTitleSize = r.getDimension(R.dimen.titleSize);

tvTitleSize は 40 に等しく、これは大きなものではありません。値が元の 2 倍になっているのはなぜですか?どうすれば修正できますか?

Ps: 私のデバイスは Galaxy nexus です。

4

2 に答える 2

3

メソッドのドキュメントResource.getDimension()を読むと、次のことがわかります。

リソース ディメンション値に適切なメトリックを掛けた値。

つまり、デバイスの実際のサイズをピクセル単位で取得しています。

sp は密度に依存しない値です。値は mdpi に対応しますが、Galaxy Nexus は mdpi の 2 倍の密度の xhdpi です。これが、20 * 2 = 40 になる理由です。

何が悪いのか疑問に思っているなら、答えは何もありません。あなたが得ているサイズは正しいです。実際のテキスト サイズは、ldpi/mdpi/hdpi/xhdpi デバイスでは異なります。

たとえば、16dp は次のことを意味します。

  • ldpi で 12 ピクセル
  • mdpiで16px
  • hdpiで24px
  • xhdpiで32px

spとの違いはdpspフォント サイズに対するユーザー設定の影響を受けることです。

于 2013-02-19T08:22:00.733 に答える
1

返される値はピクセル単位で測定されます。高密度画面の20spは、低密度画面よりも多くのピクセルに対応します。Android が変換を行います。

于 2013-02-19T08:20:15.103 に答える