dp与android不同屏幕大小之间的关系

时间:2017-01-19 07:04:01

标签: android frontend

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

2 个答案:

答案 0 :(得分:1)

Layouts Folder文件夹中为所有设备创建三个不同的res,并相应地使用这些维度。

通用布局文件夹

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

完成正常/中等布局后,请按照以下步骤操作:

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

    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)
    

    此外,还推出了新的限定符   - 最小宽度   - AvailableScreenWidth   - AvailableScreenHeight

    在此处详细了解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);
       }
    

    我希望这会有所帮助。

答案 1 :(得分:0)

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;

    }
相关问题