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です。
これを試して
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;
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ディスプレイの寸法が必要な場合は、一番上の答えに固執してください。
デフォルトの密度値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デバイスで画面の半分になります(タブレットを除く)
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;
代わりにこれを使用してはどうですか?
final DisplayMetrics displayMetrics=getResources().getDisplayMetrics();
final float screenWidthInDp=displayMetrics.widthPixels/displayMetrics.density;
final float screenHeightInDp=displayMetrics.heightPixels/displayMetrics.density;
Kotlinでの回答:
context?.let {
val displayMetrics = it.resources.displayMetrics
val dpHeight = displayMetrics.heightPixels / displayMetrics.density
val dpWidth = displayMetrics.widthPixels / displayMetrics.density
}
画面の幅だけを知りたい場合は、開発者オプションで「最小画面幅」を検索するだけです。編集することもできます。
いくつかの優れた装飾を使用して、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();