Answers:
density = getResources().getDisplayMetrics().density;
// return 0.75 if it's LDPI
// return 1.0 if it's MDPI
// return 1.5 if it's HDPI
// return 2.0 if it's XHDPI
// return 3.0 if it's XXHDPI
// return 4.0 if it's XXXHDPI
您可以使用以下方法检查屏幕密度:
switch (getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
// ...
break;
case DisplayMetrics.DENSITY_MEDIUM:
// ...
break;
case DisplayMetrics.DENSITY_HIGH:
// ...
break;
case DisplayMetrics.DENSITY_XHIGH:
// ...
break;
}
编辑请注意,随着Android的发展,switch
案例中还应包括其他值。从此编辑开始,其中包括DisplayMetrics.DENSITY_TV
和DisplayMetrics.DENSITY_XXHIGH
。请查阅文档以获取最新信息;我不会打扰保持这个答案。
density
按照SteD的建议使用。)
DENSITY_XXHIGH
。我在回答中添加了免责声明,以涵盖以后的所有案例。:)
自2018年起,您可以使用以下方法-
public static String getDeviceDensityString(Context context) {
switch (context.getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
return "ldpi";
case DisplayMetrics.DENSITY_MEDIUM:
return "mdpi";
case DisplayMetrics.DENSITY_TV:
case DisplayMetrics.DENSITY_HIGH:
return "hdpi";
case DisplayMetrics.DENSITY_260:
case DisplayMetrics.DENSITY_280:
case DisplayMetrics.DENSITY_300:
case DisplayMetrics.DENSITY_XHIGH:
return "xhdpi";
case DisplayMetrics.DENSITY_340:
case DisplayMetrics.DENSITY_360:
case DisplayMetrics.DENSITY_400:
case DisplayMetrics.DENSITY_420:
case DisplayMetrics.DENSITY_440:
case DisplayMetrics.DENSITY_XXHIGH:
return "xxhdpi";
case DisplayMetrics.DENSITY_560:
case DisplayMetrics.DENSITY_XXXHIGH:
return "xxxhdpi";
}
}
但正如@Ted所指出的,在使用前,请务必先查阅官方文档
根据以上答案,我将它们组合在一起并创建了以下函数:
public static String getDeviceDensity(Context context){
String deviceDensity = "";
switch (context.getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
deviceDensity = 0.75 + " ldpi";
break;
case DisplayMetrics.DENSITY_MEDIUM:
deviceDensity = 1.0 + " mdpi";
break;
case DisplayMetrics.DENSITY_HIGH:
deviceDensity = 1.5 + " hdpi";
break;
case DisplayMetrics.DENSITY_XHIGH:
deviceDensity = 2.0 + " xhdpi";
break;
case DisplayMetrics.DENSITY_XXHIGH:
deviceDensity = 3.0 + " xxhdpi";
break;
case DisplayMetrics.DENSITY_XXXHIGH:
deviceDensity = 4.0 + " xxxhdpi";
break;
default:
deviceDensity = "Not found";
}
return deviceDensity;
}
现在,要在哪个设备上获取密度信息以及将使用哪个文件夹,只需在该活动中添加以上方法,然后在onCreate中添加以下行
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Log.d("Screen Density: ", Helper.getDeviceDensity(this));
}
让React Native检查当前设备的大小
import { PixelRatio } from 'react-native';
switch(PixelRatio.get()) {
case 1:
return "mdpi";
case 1.5:
return "hdpi";
case 2:
return "xhdpi";
case 3:
return "xxhdpi";
case 3.5:
return "xxxhdpi";
}
PixelRatio.get()
将返回一个值范围,具体取决于Android设置中设置的显示尺寸和dpi。这些值将与您所确定的确切值不一致。
在某些设备上(例如Galaxy Tab3),density和densityDpi都返回奇怪的值,例如1.33(density),213(densityDpi)。所以我的解决方案是添加这些标志:
<item type =“ bool” name =“ is_mdpi”> [布尔] </ item>
<item type =“ bool” name =“ is_hdpi”> [bool] </ item>
<item type =“ bool” name =“ is_xhdpi“> [bool] </ item>
<item type =” bool“ name =” is_xxhdpi“> [bool] </ item>
到4个values.xml文件,将它们放在相应的res / values- [xxx] /文件夹下。