dp 与 android 不同屏幕尺寸之间的关系

Relation between dp and android different screen size

我想根据屏幕尺寸而不是根据密度制作尺寸文件夹,那么每个屏幕尺寸的 dp 值是多少。我只想根据屏幕尺寸而不是根据密度调整我的 DP 值,所以有没有计算不同屏幕尺寸的 dp 的公式。由于密度、像素和 dp 之间存在关系。但我希望它适用于不同的屏幕尺寸。就像 normal-xhdpi 屏幕和 normal-xxhdpi 屏幕一样,按钮的大小应该与密度无关,正如名字所暗示的 "DP"

public static float dpToPx(Resources rs,float dp){
        DisplayMetrics metrics = rs.getDisplayMetrics();
        float px = dp * (metrics.densityDpi/160f);
        return px;
    }

public static float pxToDp(Resources rs,float px){ 
        DisplayMetrics metrics = rs.getDisplayMetrics();
        float dp = px / (metrics.densityDpi / 160f);
        return dp;

    }

在您的 res 文件夹中为所有设备创建三个不同的 Layouts Folder 并相应地使用尺寸。

通用布局文件夹

res/layout-small
res/layout-normal
res/layout-large
res/layout-xlarge

完成 Normal/Medium 布局后,请按照以下步骤操作:

  1. 转换其他屏幕尺寸的正常尺寸。
  2. 将普通布局 xml 文件复制到其他文件夹。
  3. 根据您所在的文件夹更改所用维度的后缀
  4. 调整可绘制文件夹中图像资源的大小(宽度和高度 - 与我们用于转换尺寸的技术相同)并将它们放入各自的可绘制文件夹中(drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xdpi 等等)。
  5. 那么您的布局应该可以在每个设备上正确定位。

用于转换值

0.75 - ldpi  (small)   //mdpi dimens *0.75
1.0  - mdpi  (normal)  //First create these dimensions
1.5  - hdpi  (large)   //mdpi dimens *1.5
2.0  - xhdpi (xLarge)  //mdpi dimens *2.0

例如

android:layout_width="66dip" //in normal
android:layout_width="100dip"//in large 66*1.5=100(approx)
android:layout_width="52dip" //in small 66*0.75=52(approx)

还引入了新的限定符 - 最小宽度 - 可用屏幕宽度 - 可用屏幕高度

在此处阅读更多相关信息 https://developer.android.com/guide/practices/screens_support.html

如果您正在查看 Java 代码

 /// convert dp to pixels
   public static int dp2px(Context context, float dp) {
      return Math.round(dp * context.getResources().getDisplayMetrics().density);
   }

希望对您有所帮助。