DisplayMetrics情報取得:
//Display屏幕显示的详细信息
Display display = getWindowManager().getDefaultDisplay();
//从Display获取DisplayMetrics信息
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
//上面获取的DisplayMetrics只可读,
//第二种获取DisplayMetrics的方式,可修改里面的参数
context.getResources().getDisplayMetrics()
実際の画面の DisplayMetrics 情報
モデル | 画面サイズ | 幅ピクセル | 高さピクセル | 密度 | 密度Dpi | スケーリングされた密度 | xdpi | ydpi |
---|---|---|---|---|---|---|---|---|
ミ4C | 4.9インチ | 1080 | 1920年 | 3.0 | 480 | 3.0 | 449.704 | 447.412 |
キビミックス2 | 5.99インチ | 1080 | 2160 | 2.75 | 440 | 2.75 | 403.411 | 403.411 |
まず、160dpiはGoogleが定めた密度規格で、dpiはdots_per_inchです。
- widthPixels: width で表示される値は 1080 で、これは画面の幅が 1080px であることを意味します
- heightPixels: 高さ
- 密度Dpi: 密度
- 密度: 密度比 (密度/標準密度、つまり 480/160=3)、単位インチに何ポイントを収容できるか
- scaledDensity: 密度と同じ、テキスト スケーリングの計算は sp
- xDpi: 横方向の実際の密度、1 インチが実際に横方向に収まるポイントの数
- yDpi: 垂直方向の実密度
densityDpi と密度の関係:
Density は、densityDpi を標準濃度の 160 で割った比率 (上図参照) で、主に一般的に使用される dp の計算に使用されます。たとえば、Xiaomi 4c コントロールの幅が 360dp に設定されている場合、変換されたピクセルは 1080px で、これは全画面です。
密度DpiとxDpi、yDpiの関係:
xDpi と yDpi は画面の実際の画面密度です. たとえば、上記で取得した Xiaomi mix2 は 403.411 ですが、Xiaomi が宣伝している mix2 の画面密度は 403ppi です.densityDpi はおそらくメーカーによって設定された値であり、インターフェース適応は基本的にdensityDpiのみを使用します
画面密度 = 画面の対角線のピクセル数 画面サイズ 画面密度 = \frac {画面の対角線のピクセル数}{画面サイズ}画面密度=画面サイズ画面の対角線上のピクセル数
public static float applyDimension(int unit, float value,
DisplayMetrics metrics) {
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f / 72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f / 25.4f);
}
return 0;
}