web-dev-qa-db-ja.com

setWidth(int pixel)はdipまたはpxを使用しますか?

SetWidth(int pixels)は、デバイスに依存しないピクセルまたは物理ピクセルを単位として使用しますか?たとえば、setWidth(100)はビューの幅を100ディップまたは100ピクセルに設定しますか?

ありがとう。

93
user256239

ピクセルを使用しますが、代わりにディップを使用する方法を疑問に思っていると確信しています。答えは TypedValue.applyDimension() にあります。コードでディップをpxに変換する方法の例を次に示します。

// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
217
Daniel Lew

コードで一定数のDIPを取得する正しい方法は、次のようなdp値を含むリソースXMLファイルを作成することです。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="image_width">100dp</dimen>
    <dimen name="image_height">75dp</dimen>
</resources>

次に、次のようにコード内のリソースを参照します。

float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));

返されたフロートは、デバイスのピクセル密度に応じてスケーリングされるため、アプリケーション全体で変換メソッドを複製し続ける必要はありません。

24
SDJMcHattie

メソッドsetWidth(100)、幅として100 pxを設定します(dpではありません)。したがって、さまざまなAndroid電話で幅が変化する問題に直面する可能性があります。ピクセルではなくdpで測定を使用します。サンプル幅= 300ピクセル、高さ= 400ピクセルのdpで測定値を取得するコード。

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
7
Nidhin
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;

ソース(@Romain Guy)

4
pomber

もちろんピクセルは、メソッドがパラメーターとしてピクセルを要求しています。

0
Josnidhin

私にうまくいく上記の回答に基づいて、私はいくつかのヘルパーメソッドを生成し、それらをユーティリティに追加してプロジェクト全体で使用します。

   // value in DP
   public static int getValueInDP(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInDP(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    // value in PX
    public static int getValueInPixel(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInPixel(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }
0
Abhishek Garg