답변:
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"> [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] / 폴더에 넣습니다.