我想检查这个以获取不同的互联网图片。如何做到?
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_XXHIGH
。我在答案中添加了免责声明以涵盖所有未来情况。 :) - Ted Hopp截至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;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Log.d("Screen Density: ", Helper.getDeviceDensity(this));
}
在检查断点值时,您应始终检查区间!
根据Android文档:https://developer.android.com/reference/android/util/DisplayMetrics
在Kotlin中检查的方法如下:
when {
val density: Float = context?.resources?.displayMetrics?.density
// ldpi
(density <= 0.75f) -> mulFactor = 0.75f
// mdpi
(density >= 0.75f && density <= 1.0f) -> mulFactor = 1.0f
// hdpi
(density > 1.0f && density <= 1.5f) -> mulFactor = 1.5f
// xhdpi
(density > 1.5f && density <= 2.0f) -> mulFactor = 2.0f
// xxhdpi
(density > 2.0f && density <= 3.0f) -> mulFactor = 3.0f
// xxxhdpi
(density > 3.0f) -> mulFactor = 4.0f
}
return mulFactor;
React Native可以检查设备当前的尺寸
原始答案: Original Answer
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,返回一系列值,这些值与您所设想的完全一致的数值不会重合。 - EnKrypt<item type="bool" name="is_mdpi">[bool]</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]/ 文件夹下。