View.setPaddingはpxでのみ受け入れますが、とにかくdpでsetPaddingを使用できますか?


92

Android関数View.setPadding(int left, int top, int right, int bottom)はpxでのみ値を受け入れますが、dpでパディングを設定したいと思います。それを回避する方法はありますか?

回答:


184

コードに直接

    int padding_in_dp = 6;  // 6 dps
    final float scale = getResources().getDisplayMetrics().density;
    int padding_in_px = (int) (padding_in_dp * scale + 0.5f);

1
こんにちは、質問があります。この式はパディングなどにのみ使用されますか?例えば、長方形のマージンや寸法?
emeraldhieu

4
これは、dp単位をピクセル単位に変換する式です。どこでも使用できます
Labeeb Panampullan 2011

2
私はgetResources()アクティビティによって継承される関数だと思いますが、カスタムリストビューアダプターでこれらの行を使用しようとしています。電話をかけられない場合、これを行う方法はありますgetResources()か?
Mike Baxter

1
アダプターからgetContext()。getResources()。getDisplayMetrics()。density;を実行するだけです。
スティーブG.

4
「+ 0.5f」の説明はどこにありますか?
Xavier L.

96

ディメンションを(dpなどで)XMLファイルで定義すると(少なくともほとんどの場合、どちらにしてもより良い)、次のコードを使用してそのピクセル値を取得できます。

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)

2

プログラムで値をdpに変換するより良い方法があります。

int value = 200;
int dpValue = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,        
            context.getResources().getDisplayMetrics());

次にdpValue、メソッドに適用します。例:setPadding(dpValue,dpValue,dpValue,dpValue);



0

私も同じ問題を抱えています。私が見つけた唯一の解決策(それは本当にあなたを助けにはなりません:))をXmlファイルに設定することです。

コードから密度を取得できる場合は、次の変換を使用できます。「ディップ単位からスクリーンピクセルへの変換は簡単です。ピクセル=ディップ*(密度/ 160)。」(http://developer.android.com/guide/practices/screens_support.htmlから)

編集:画面密度を取得できます:http : //developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.