0

この関数を使用して、Javaでdimens.xmlファイルからディメンションを取得しています。

public static float getDimen(Context context, String name)
{
    Assert.assertNotNull(context);
    Assert.assertNotNull(name);

    Resources res = context.getResources();
    int dimensionID = res.getIdentifier(name, "dimen", context.getPackageName());

    return res.getDimension(dimensionID);
}

これは次のように機能getDimen(mContext, "textsize_small")し、「R.dimen.textsize_small」値を取得します(または少なくともそうする必要があります)。

<resources>
      <dimen name="textsize_small">10dp</dimen>
      <dimen name="textsize_medium">13dp</dimen>
      <dimen name="textsize_large">15dp</dimen>
      <dimen name="textsize_xlarge">17dp</dimen>
</resources>

したがって、この値を取得した後、これを使用してTextViewのTextSizeを設定します。

float textsize = getDimen(mContext, "textsize_" + object.getDesiredSize);
textview.setTextSize(textsize);
Log.d(TAG, "TextSize: " + textview.getTextSize());

編集:

設定android:textSize="@dimen/textsize_small"して使用しgetDimen(mContext, "textsize_small")ました。最初のものではLog.dは15.0を返し、2番目のものでは22.5を返します

型変換が欠落していますか?

4

1 に答える 1

4

答えは正しいです。xhdpi デバイス (通常は 360 ピクセル/インチ) で実行しており、値を として定義していますdp。したがって、10dp は 22.5 ピクセルです (10 * 360 / 160 — 160 は、dp 値がスケーリングされるデフォルトのピクセル密度です)。つまり、22.5 ピクセルは、mdpi (160 ピクセル/インチ) 画面での 10 ピクセルと同じ物理サイズになります。

dp からピクセルへの変換を 2 回適用しているようです。hdpi デバイスでは、比率は 1.5 で、その 2 乗を取得しています (1.5 2 * 10 = 22.5)。これは、 への呼び出しが原因ですsetTextSize(textsize)ドキュメントから:

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

使用してみてください:

textview.setTextSize(TypedValue.COMPLEX_UNIT_PX, textsize);
于 2013-01-01T21:15:22.523 に答える