【问题标题】:Relation between dp and android different screen sizedp与android不同屏幕尺寸的关系
【发布时间】:2017-01-19 15:40:37
【问题描述】:

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

【问题讨论】:

标签: android frontend


【解决方案1】:

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

通用布局文件夹

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. 那么您的布局应该可以在每台设备上正确定位。

用于转换价值

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

我希望这会有所帮助。

【讨论】:

  • 阅读您的解决方案后我想到的一个解决方案是(如果我错了,请纠正我):- 当屏幕尺寸较小时,将像素除以 3。如果屏幕尺寸较小,则将 px 除以 2,对于其他屏幕尺寸,保持像素和 dp 不变,与屏幕密度无关
  • 阅读完整答案,我也给出了一步一步的过程和例子
  • 对于 xhdpi ,它不应该像除以 2 。原因是因为它取决于密度,xhdpi 的密度值是 2,所以对于 mdpi,让我们举个例子,如果值是 30 因此转换为像素,它将是 30 px,因为 mdpi 的 1 dp = 1 px 然后除以 2即密度,因此 xhdpi 将达到 15dp,在 ypu r 的情况下,它将是 45 dp,这将是正确的
  • 是的,它不是除以 2,而是乘以 2 :)
  • 是否有必要将尺寸制作为 normal-xhdpi、normal-xxhdpi 还是只制作我想要为不同屏幕尺寸制作的普通尺寸文件。
【解决方案2】:
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;

    }

【讨论】:

  • 这个公式考虑了密度,所以对于 norma-xxhdpi 屏幕,屏幕的大小会比 normal-xhdpi screen 更小。我希望所有普通屏幕手机都一样。仅相对于屏幕尺寸将 px 转换为 dp 的公式是什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 2015-11-18
  • 2019-06-17
  • 2014-10-22
  • 1970-01-01
相关资源
最近更新 更多