216

dip/dp (Java ファイル内) を使用して、Android ウィジェットのレイアウトをコーディングする必要があります。実行時にコーディングすると、

int pixel=this.getWindowManager().getDefaultDisplay().getWidth();

画面の幅をピクセル (px) で返します。これを dp に変換するために、次のようにコーディングしました。

int dp =pixel/(int)getResources().getDisplayMetrics().density ;

これは正しい答えを返していないようです。画面解像度が 480 x 800 の WVGA800 のエミュレータを作成しました。エミュレータを実行し、コードにピクセルと dp の値を出力させると、両方とも 320 になりました。このエミュレーターは 240 dpi で、倍率は 0.75 です。

4

13 に答える 13

402

これを試して

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);

float density  = getResources().getDisplayMetrics().density;
float dpHeight = outMetrics.heightPixels / density;
float dpWidth  = outMetrics.widthPixels / density;

また

ありがとう @Tomáš Hubálek

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();    
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
于 2012-08-01T08:19:17.193 に答える
122

Google からのこの質問に出くわしましたが、後で API >= 13 に有効な簡単な解決策を見つけました。

今後の参考のために:

Configuration configuration = yourActivity.getResources().getConfiguration();
int screenWidthDp = configuration.screenWidthDp; //The current width of the available screen space, in dp units, corresponding to screen width resource qualifier.
int smallestScreenWidthDp = configuration.smallestScreenWidthDp; //The smallest screen size an application will see in normal operation, corresponding to smallest screen width resource qualifier.

構成クラスの参照を参照してください

編集: Nick Baicoianu が指摘したように、これは画面の使用可能な幅/高さを返します (ほとんどの用途で興味深いものになるはずです)。実際の表示サイズが必要な場合は、一番上の回答に固執してください。

于 2014-05-27T23:43:30.697 に答える
7

デフォルトの密度値 160 がありません。

    2 px = 3 dip if dpi == 80(ldpi), 320x240 screen
    1 px = 1 dip if dpi == 160(mdpi), 480x320 screen
    3 px = 2 dip if dpi == 240(hdpi), 840x480 screen

つまり、ポートレート モードで 160dip に等しい幅でレイアウトを設計すると、すべての ldpi/mdpi/hdpi デバイス (タブレットを除く) で画面の半分になります。

于 2011-06-24T09:18:55.557 に答える
1

Compose の新しい世界を 1 行で

val (height, width) = LocalConfiguration.current.run { screenHeightDp.dp to screenWidthDp.dp }
于 2021-11-17T16:29:00.463 に答える
-5

あなたの問題は、floatをintにキャストして精度を失うことです。また、除算ではなく、因数を掛ける必要があります。

これを行う:

int dp = (int)(pixel*getResources().getDisplayMetrics().density);
于 2011-10-13T10:36:06.487 に答える