回答:
表示倍率を使用して、それをdpsからピクセルに変換する必要があります。
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
へpx
?ありがとう。
私はこれが古い質問であることを知っていますが、私はこの変換を実行するはるかにきれいな方法を見つけました。
ジャワ
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
コトリン
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
上記のあなたはPXに変換したいDP値である
要件を見ると、代替ソリューションもあります。コンパイル時にdpの次元を知っているようなので、リソースにdimenエントリを追加できます。次に、dimenエントリをクエリすると、この呼び出しで自動的にピクセルに変換されます。
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
そして、あなたのdimens.xmlは次のようになります:
<dimen name="dimen_entry_in_dp">72dp</dimen>
このアイデアを拡張すると、1dpまたは1spの値をdimenエントリとして格納し、その値をクエリして乗数として使用できます。このアプローチを使用すると、コードを数学的なものから隔離し、ライブラリに依存して計算を実行します。
テストされた最も簡単な方法(そしてapi 1からでも機能します)は次のとおりです。
getResources().getDimensionPixelSize(R.dimen.example_dimen);
ドキュメントから:
rawピクセルのサイズとして使用する特定のリソースIDの次元を取得します。これは、戻り値がサイズとして使用するために整数ピクセルに変換されることを除いて、getDimension(int)と同じです。サイズ変換では、ベース値を丸め、ゼロ以外のベース値のサイズが少なくとも1ピクセルになるようにします。
はい、それは値を丸めますが、それほど悪くはありません(ldpiがあまり一般的でない場合、hdpiおよびldpiデバイスの奇数値に少し値を追加する必要があります)4dpを16(ピクセル)に変換するxxhdpiデバイスでテストしました本当。