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 布局后,请按照以下步骤操作:
- 转换其他屏幕尺寸的正常尺寸。
- 将普通布局 xml 文件复制到其他文件夹。
- 根据您所在的文件夹更改所用维度的后缀
- 调整可绘制文件夹中图像资源的大小(宽度和高度 - 与我们用于转换尺寸的技术相同)并将它们放入各自的可绘制文件夹中(drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xdpi 等等)。
- 那么您的布局应该可以在每个设备上正确定位。
用于转换值
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);
}
希望对您有所帮助。
我想根据屏幕尺寸而不是根据密度制作尺寸文件夹,那么每个屏幕尺寸的 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 布局后,请按照以下步骤操作:
- 转换其他屏幕尺寸的正常尺寸。
- 将普通布局 xml 文件复制到其他文件夹。
- 根据您所在的文件夹更改所用维度的后缀
- 调整可绘制文件夹中图像资源的大小(宽度和高度 - 与我们用于转换尺寸的技术相同)并将它们放入各自的可绘制文件夹中(drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xdpi 等等)。
- 那么您的布局应该可以在每个设备上正确定位。
用于转换值
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);
}
希望对您有所帮助。