programing tip

안드로이드 장치를 확인하는 방법은 HDPI 화면 또는 MDPI 화면입니까?

itbloger 2020. 7. 22. 08:19
반응형

안드로이드 장치를 확인하는 방법은 HDPI 화면 또는 MDPI 화면입니까?


인터넷으로 다른 이미지를 가져 오기 위해 이것을 확인하고 싶습니다. 그렇게하는 방법?


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. 최신 정보 는 문서참조하십시오 . 나는이 대답을 유지하는 것을 귀찮게하지 않을 것입니다.


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

}

For React Native to check which size is currently of device

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


On some devices (mine is Galaxy Tab3), both density and densityDpi return strange values like 1.33(density), 213(densityDpi). So my solution is to add these flag :

<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>

to 4 values.xml files, put these under corresponding res/values-[xxx]/ folders.

참고URL : https://stackoverflow.com/questions/5099550/how-to-check-an-android-device-is-hdpi-screen-or-mdpi-screen

반응형