私も少し混乱しました。しかし、これらの機能を別のデバイスで実行すると、私はそれを手に入れ、今ではすべてが明確になりました.これがあなたにも役立つことを願っています.
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
//注: 上記の式から値が得られます: Samsung Galaxy sIII の場合: 720 * 1280 Samsung 4g LTE タブレットの場合: 800 x 1232
したがって、両方のデバイスの高さがほぼ同じであることに驚かれることでしょう。しかし、これはそれがどのように機能するかではありません。実際の dp を取得するには、以下の関数「convertPixelsToDp」を使用する必要があります。
public static float convertPixelsToDp(float px,Context context)
{
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float dp = px / (metrics.densityDpi / 160f);
return dp;
}
したがって、この式を使用すると、Samsung Galaxy sIII の場合は 360*640 になります。
//To convert dp back to pixel
public static float convertDpToPixel(float dp,Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi/160f);
return px;
}
//This will give you ratio
// For Samsung Galaxy sIII : ratio is 2 (320/160)
float d = getApplicationContext().getResources().getDisplayMetrics().density;
// will either be DENSITY_LOW, DENSITY_MEDIUM or DENSITY_HIGH
//For Samsung Galaxy sIII : 320 dpi
int dpiClassification = metrics.densityDpi;