値をそのままロードしたいと思います。に 1 つ、 に 1 つの2 つのdimension.xml
ファイルがあります。/res/values/dimension.xml
/res/values-sw360dp/dimension.xml
ソースコードから次のようなことをしたい
getResources().getDimension(R.dimen.tutorial_cross_marginTop);
これは機能しますが、取得する値は画面密度係数 (hdpi の場合は 1.5、xhdpi の場合は 2.0 など) で乗算されます。
私もやってみました
getResources().getString(R.dimen.tutorial_cross_marginTop);
これは原理的には機能しますが、「dip」で終わる文字列が取得されます...
ベストアンサー1
私のdimens.xmlには
<dimen name="test">48dp</dimen>
コードで私がそうするなら
int valueInPixels = (int) getResources().getDimension(R.dimen.test)
これは、ドキュメントに記載されているように、現在の電話の密度(私の場合は 48dp x 1.5)を掛けた 72 を返します。
ドキュメントに記載されているとおりです:
特定のリソース ID のディメンションを取得します。単位変換は、リソースに関連付けられている現在の DisplayMetrics に基づきます。
したがって、xmlと同じように正確なdp値が必要な場合は、DisplayMetricsの密度で割るだけです。
int dp = (int) (getResources().getDimension(R.dimen.test) / getResources().getDisplayMetrics().density);
dpは現在48になります