詳細な Android DisplayMetrics

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;
  }

おすすめ

転載: blog.csdn.net/rd_w_csdn/article/details/115008571