web-dev-qa-db-ja.com

Androidの実行時にdpまたはdipの面で画面幅を決定する方法は?

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

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です。

177
Khushboo

これを試して

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;
346
Dax

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が述べたように、これはusable画面の幅/高さを返します(これはほとんどの用途で興味深いはずです)。 actualディスプレイの寸法が必要な場合は、一番上の答えに固執してください。

98
serjlee

デフォルトの密度値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デバイスで画面の半分になります(タブレットを除く)

7
Mykhailo Gaidai
DisplayMetrics displayMetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

int width_px = Resources.getSystem().getDisplayMetrics().widthPixels;

int height_px =Resources.getSystem().getDisplayMetrics().heightPixels;

int pixeldpi = Resources.getSystem().getDisplayMetrics().densityDpi;


int width_dp = (width_px/pixeldpi)*160;
int height_dp = (height_px/pixeldpi)*160;
6

代わりにこれを使用してはどうですか?

final DisplayMetrics displayMetrics=getResources().getDisplayMetrics();
final float screenWidthInDp=displayMetrics.widthPixels/displayMetrics.density;
final float screenHeightInDp=displayMetrics.heightPixels/displayMetrics.density;
6

Kotlinでの回答:

  context?.let {
        val displayMetrics = it.resources.displayMetrics
        val dpHeight = displayMetrics.heightPixels / displayMetrics.density
        val dpWidth = displayMetrics.widthPixels / displayMetrics.density
    }
1
Bolling

画面の幅だけを知りたい場合は、開発者オプションで「最小画面幅」を検索するだけです。編集することもできます。

1
math channel

いくつかの優れた装飾を使用して、DPの観点から画面の幅と高さを取得します。

ステップ1:インターフェースを作成する

public interface ScreenInterface {

   float getWidth();

   float getHeight();

}

ステップ2:実装クラスを作成する

public class Screen implements ScreenInterface {
    private Activity activity;

    public Screen(Activity activity) {
        this.activity = activity;
    }

    private DisplayMetrics getScreenDimension(Activity activity) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        return displayMetrics;
    }

    private float getScreenDensity(Activity activity) {
        return activity.getResources().getDisplayMetrics().density;
    }

    @Override
    public float getWidth() {
        DisplayMetrics displayMetrics = getScreenDimension(activity);
        return displayMetrics.widthPixels / getScreenDensity(activity);
    }

    @Override
    public float getHeight() {
        DisplayMetrics displayMetrics = getScreenDimension(activity);
        return displayMetrics.heightPixels / getScreenDensity(activity);
    }
} 

ステップ3:アクティビティで幅と高さを取得する:

Screen screen = new Screen(this); // Setting Screen
screen.getWidth();
screen.getHeight();
1
Ali Azaz Alam