안드로이드에서 프로그래밍 방식으로 화면 밀도를 얻는가?


516

안드로이드에서 프로그래밍 방식으로 화면 밀도를 얻는 방법은 무엇입니까?

의미 : 현재 장치의 화면 dpi를 찾는 방법은 무엇입니까?


9
많은 답변 getDisplayMetrics().xdpi은 장치의 실제 dpi를 반환하는 것으로 나타납니다. 이 값은 제조업체가 여러 장치에서 일관되게 올바르게 설정 하지 않으므로 사용할 수 없습니다 . 슬프지만 사실 : 실제 dpi에 대한 정보는 없습니다 . 출처 : groups.google.com/d/msg/android-developers/g56jV0Hora0/…
sulai

2
getResources().getDisplayMetrics().xdpi그리고 getResources().getDisplayMetrics().ydpi당신에게 줄 것이다 실제 수평 및 수직 밀도 대부분의 경우 다르다.
Ωmega

답변:


526

DisplayMetrics 구조체 에서 디스플레이에 대한 정보를 얻을 수 있습니다 .

DisplayMetrics metrics = getResources().getDisplayMetrics();

Android는 직접 픽셀 매핑을 사용하지 않지만 소수의 양자화 된 밀도 독립 픽셀 값을 사용한 다음 실제 화면 크기로 조정됩니다. 너무 metrics.densityDpi속성이 중 하나가 될 것입니다 DENSITY_xxx상수 ( 120, 160, 213, 240, 320, 480또는 640dpi)로.

실제 LCD 픽셀 밀도 가 필요할 경우 (아마도 OpenGL 앱의 경우) 가로 및 세로 밀도의 속성 metrics.xdpimetrics.ydpi속성에서 각각 얻을 수 있습니다 .

4 이전의 API 레벨을 대상 metrics.density으로하는 경우이 특성은 참조 밀도 (160dpi)의 부동 소수점 스케일링 계수입니다. 현재 제공 한 것과 동일한 값을 metrics.densityDpi계산할 수 있습니다

int densityDpi = (int)(metrics.density * 160f);

42
이 게시물은 2 년 전부터 부여되었지만 이것이 검색을 위해 Google에 처음
등장한 것이므로

5
어떤 버전 이후로 더 이상 필요하지 않습니까?
TacB0sS

사람들이 사용중인 최신 API 버전과 일치하도록 답변을 업데이트했습니다.
joshperry

6
참고 :이 새로운 API를 대신 사용할 수도 있습니다. getWindowManager().getDefaultDisplay().getRealMetrics(metrics); 공식적으로 API 17에 추가되었지만 시도한 4.0 장치에서도 올바르게 작동한다는 사실에 놀랐습니다.
benkc

2
.. 또한이의 GetResources () getDisplayMetrics () densityDpi
amorenew

367

이것은 또한 작동합니다 :

 getResources().getDisplayMetrics().density;

이것은 당신에게 줄 것이다 :

0.75-LDPI

1.0-MDPI

1.5-HDPI

2.0-xhdpi

3.0-xxhdpi

4.0-xxxhdpi

여기에 이미지 설명을 입력하십시오

심판 : 밀도

여기에 이미지 설명을 입력하십시오

심판 2


10
+1 이것은 WindowManager(예를 들어 로더 내부)에 직접 액세스 할 수 없을 때 작동합니다 . 160을 곱하십시오
Michał K

2
API 레벨 16에는 xxdpi가 추가되어 3.0으로 변환됩니다.
QED

3
이것에 대해 1.3312501이 제공됩니다 tvdpi. 자세한 내용 tvdpi여기
Dori

2
Nexus 7 보고서 1.3, 왜 대괄호가 들어가야합니까?
Neil

1
@selbie, 귀하의 휴대 전화는 아마도 두 개의 정의 된 밀도 사이의 절반을보고 있기 때문에 더 높은 품질의 자원을 끌어 당기고 확장하고있을 것입니다.
Sakiboy

145
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

switch(metrics.densityDpi) {
     case DisplayMetrics.DENSITY_LOW:
         break;

     case DisplayMetrics.DENSITY_MEDIUM:
         break;

     case DisplayMetrics.DENSITY_HIGH:
         break;
}

이것은 API 레벨 4 이상에서 작동합니다.


밀도 7을 213으로보고하는 Nexus 7과 같은 기기를 어떻게 처리 하시겠습니까?
Neil

if (metrics.densityDpi> DisplayMetrics.DENSITY_LOW && metrics.densityDpi <DisplayMetrics.DENSITY_MEDIUM)
Mitul Nakum

1
또는 if (metrics.densityDpi <DisplayMetrics.DENSITY_LOW) {} 그렇지 않으면 if (metrics.densityDpi <DisplayMetrics. DENSITY_MEDIUM) {} .....
Mitul Nakum

1
Neil, 213은 TV DPI라고하며 해당 DENSITY_TV에 대한 명명 된 디스플레이 메트릭 밀도가 있습니다.
Andrew S

63

정적 도우미 메소드로서의 Blundell의 답변 :

private static String getDensityName(Context context) {
    float density = context.getResources().getDisplayMetrics().density;
    if (density >= 4.0) {
        return "xxxhdpi";
    }
    if (density >= 3.0) {
        return "xxhdpi";
    }
    if (density >= 2.0) {
        return "xhdpi";
    }
    if (density >= 1.5) {
        return "hdpi";
    }
    if (density >= 1.0) {
        return "mdpi";
    }
    return "ldpi";
}

tvdpi 밀도는 어떻습니까? 나는 그것이 1.33이라고 생각한다
Anoop

@AnoopssGolden 표준이 아니므로 원하는 경우 추가 할 수 있지만 대답에 포함시켜야한다고 생각하지 않습니다. 안드로이드 문서에서 : "이것은"1 차 "밀도 그룹으로 간주되지 않습니다. 주로 TV를위한 것이며 대부분의 앱은 필요하지 않습니다."
qwertzguy

그러나 nexus 7 장치는 tvdpi 밀도 그룹에 속합니다.
Anoop

1
나는 이것이 조금 낡았지만 추가하기만한다는 것을 알고 있습니다. MDPI는 Nexus 7에서 대부분 작동하지만 지금 시도 할 때 MDPI로 내려 오는 이미지는 충분히 크지 않습니다. TVDPI를 정의한 다음 서버에서 더 큰 이미지 크기를 요청해야합니다. 많이 사용되지는 않지만 MDPI가 모든 것을 픽업한다는 의미는 아닙니다.
RED_

3
@Andrew S, else를 사용하면 모든 if가 즉시 반환되므로 코드의 효율성에 아무런 변화가 없습니다. 중괄호를 제거하는 것은 스타일의 문제이며 IMHO는 코드를 유지 관리 할 때 오류가 발생하기 쉽습니다.
qwertzguy

45

이 시도:

DisplayMetrics dm = context.getResources().getDisplayMetrics();
int densityDpi = dm.densityDpi;

5
나는 활동보다는 맥락에 의존하기 때문에 이것을 훨씬 더 좋아합니다.
greg7gkb

동의, 나는 이것을 View훨씬 더 쉽게 사용할 수 있다 (필요한 곳이다!)
Andrew Wyld

37

dpi를 얻으려면 :

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);

// will either be DENSITY_LOW, DENSITY_MEDIUM or DENSITY_HIGH
int dpiClassification = dm.densityDpi;

// these will return the actual dpi horizontally and vertically
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;

4
dm.densityDpi는 DENSITY_LOW 또는 DENSITY_MEDIUM 또는 DENSITY_HIGH를 반환합니다. xhdpi는 어떻습니까? DENSITY_XHIGH 정도가 있습니까?
유진 추막


34

여기에 밀도 상수입니다 소스 :

여기에 이미지 설명을 입력하십시오

표준 밀도 외에도 5 개의 중간 밀도가 있습니다. 이 사실을 고려하면 다음 코드는 완전한 작동 예입니다.

float density = getResources().getDisplayMetrics().density;

if (density == 0.75f)
{
    // LDPI
}
else if (density >= 1.0f && density < 1.5f)
{
    // MDPI
}
else if (density == 1.5f)
{
    // HDPI
}
else if (density > 1.5f && density <= 2.0f)
{
    // XHDPI
}
else if (density > 2.0f && density <= 3.0f)
{
    // XXHDPI
}
else
{
    // XXXHDPI 
}

또는 다음을 사용하여 밀도 상수를 찾을 수 있습니다 densityDpi.

int densityDpi = getResources().getDisplayMetrics().densityDpi;

switch (densityDpi)
{
    case DisplayMetrics.DENSITY_LOW:
        // LDPI
        break;

    case DisplayMetrics.DENSITY_MEDIUM:
        // MDPI
        break;

    case DisplayMetrics.DENSITY_TV:
    case DisplayMetrics.DENSITY_HIGH:
        // HDPI
        break;

    case DisplayMetrics.DENSITY_XHIGH:
    case DisplayMetrics.DENSITY_280:
        // XHDPI
        break;

    case DisplayMetrics.DENSITY_XXHIGH:
    case DisplayMetrics.DENSITY_360:
    case DisplayMetrics.DENSITY_400:
    case DisplayMetrics.DENSITY_420:
        // XXHDPI
        break;

    case DisplayMetrics.DENSITY_XXXHIGH:
    case DisplayMetrics.DENSITY_560:
        // XXXHDPI
        break;
}

29

다음 답변은 qwertzguy의 답변을 기반으로 약간 개선되었습니다.

double density = getResources().getDisplayMetrics().density;
if (density >= 4.0) {
   //"xxxhdpi";
}
else if (density >= 3.0 && density < 4.0) {
   //xxhdpi
}
else if (density >= 2.0) {
   //xhdpi
}
else if (density >= 1.5 && density < 2.0) {
   //hdpi
}
else if (density >= 1.0 && density < 1.5) {
   //mdpi
}

1
이 코드는 다른 것들과 중복 될 수있는 앰퍼샌드와 조건으로 할 수 있습니다.
Andrew S

1
@Andrew, 정정 주셔서 감사합니다. 그에 따라 답변을 편집했습니다.
San

2
@San 첫 번째 조건이 참인 경우> =를 지속적으로 확인하기 만하면 해당 조건에서 &&가 필요하지 않습니다.
dbenson

3
Nexus 5X (기본 Google 기기 btw)에서 올바른 결과를 반환하지 않습니다. 장치 밀도는 xxhdpi이며 반환되는 이중 밀도는 약 2.6입니다.
Tobliug

20

실제 디스플레이 dpi 를 원한다면 디스플레이 메트릭을 쿼리하면 그 사이에 답이 있습니다.

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int dpiClassification = dm.densityDpi;
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;

densityDpi * 160은 사용해야 할 밀도 / 값을 제공합니다.

0.75 - ldpi - 120 dpi
1.0 - mdpi - 160 dpi
1.5 - hdpi - 240 dpi
2.0 - xhdpi - 320 dpi
3.0 - xxhdpi - 480 dpi
4.0 - xxxhdpi - 640 dpi

이전 게시물에 지정된

그러나 dm.xdpi항상 주어진 디스플레이 의 실제 dpi 를 제공 하지는 않습니다 . 예 :

Device: Sony ericsson xperia mini pro (SK17i)
Density: 1.0 (e.g. suggests you use 160dpi resources)
xdpi: 193.5238
Real device ppi is arround 193ppi


Device: samsung GT-I8160 (Samsung ace 2)
Density 1.5 (e.g. suggests you use 240dpi resources)
xdpi 160.42105
Real device ppi is arround 246ppi

따라서 디스플레이의 실제 dpi는 Density * xdpi이어야합니다. 그러나 이것이 올바른 방법인지 확실하지 않습니다!


1
지난 6 개월 동안 Google Play의 모든 앱에서 Density * xdpi 사용이 완벽하게 작동하고 있습니다.
Marek Halmo

밀도 곱하기 * xdpi는 논리적이지 않으므로 밀도와 xdpi가 모두 더 높은 밀도의 장치가 있음을 분명히 알 수 있으므로 곱하면 두 배로 증가합니다. 나는 삼성 에이스 2가 공급 업체의 오류라고 말하고 싶습니다. 안드로이드 사양은 xdpi와 ydpi가 실제 픽셀 밀도라는 점입니다. 어떤 것도 곱하지 마십시오.
ToolmakerSteve

17

이것은 당신의 활동에 도움이 될 것입니다 ...

void printSecreenInfo(){

    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);

    Log.i(TAG, "density :" +  metrics.density);

    // density interms of dpi
    Log.i(TAG, "D density :" +  metrics.densityDpi);

    // horizontal pixel resolution
    Log.i(TAG, "width pix :" +  metrics.widthPixels);

     // actual horizontal dpi
    Log.i(TAG, "xdpi :" +  metrics.xdpi);

    // actual vertical dpi
    Log.i(TAG, "ydpi :" +  metrics.ydpi);

}

출력 :

I/test( 1044): density :1.0

I/test( 1044): D density :160

I/test( 1044): width pix :800

I/test( 1044): xdpi :160.0

I/test( 1044): ydpi :160.42105

13
public static String getDensity(Context context) {
    String r;
    DisplayMetrics metrics = new DisplayMetrics();

    if (!(context instanceof Activity)) {
        r = "hdpi";
    } else {
        Activity activity = (Activity) context;
        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

        if (metrics.densityDpi <= DisplayMetrics.DENSITY_LOW) {
            r = "ldpi";
        } else if (metrics.densityDpi <= DisplayMetrics.DENSITY_MEDIUM) {
            r = "mdpi";
        } else {
            r = "hdpi";
        }
    }

    return r;
}

11

서비스에서 밀도를 검색하려면 다음과 같이 작동합니다.

WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);

내가 어떤 창 관리자 없었다 때이 사람은 나에게 도움이
silentsudo을

8

당신은 이것을 시도해야합니다. 토스트를 찾아서 보여줄 방법을 추가했습니다. 장치가 속하는 범주

public static int differentDensityAndScreenSize(Context context) {
  int value = 20;
  String str = "";
  if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
   switch (context.getResources().getDisplayMetrics().densityDpi) {
   case DisplayMetrics.DENSITY_LOW:
    str = "small-ldpi";
    value = 20;
    break;
   case DisplayMetrics.DENSITY_MEDIUM:
    str = "small-mdpi";
    value = 20;
    break;
   case DisplayMetrics.DENSITY_HIGH:
    str = "small-hdpi";
    value = 20;
    break;
   case DisplayMetrics.DENSITY_XHIGH:
    str = "small-xhdpi";
    value = 20;
    break;
   case DisplayMetrics.DENSITY_XXHIGH:
    str = "small-xxhdpi";
    value = 20;
    break;
   case DisplayMetrics.DENSITY_XXXHIGH:
    str = "small-xxxhdpi";
    value = 20;
    break;
   case DisplayMetrics.DENSITY_TV:
    str = "small-tvdpi";
    value = 20;
    break;
   default:
    str = "small-unknown";
    value = 20;
    break;
   }

  } else if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
   switch (context.getResources().getDisplayMetrics().densityDpi) {
   case DisplayMetrics.DENSITY_LOW:
    str = "normal-ldpi";
    value = 82;
    break;
   case DisplayMetrics.DENSITY_MEDIUM:
    str = "normal-mdpi";
    value = 82;
    break;
   case DisplayMetrics.DENSITY_HIGH:
    str = "normal-hdpi";
    value = 82;
    break;
   case DisplayMetrics.DENSITY_XHIGH:
    str = "normal-xhdpi";
    value = 90;
    break;
   case DisplayMetrics.DENSITY_XXHIGH:
    str = "normal-xxhdpi";
    value = 96;
    break;
   case DisplayMetrics.DENSITY_XXXHIGH:
    str = "normal-xxxhdpi";
    value = 96;
    break;
   case DisplayMetrics.DENSITY_TV:
    str = "normal-tvdpi";
    value = 96;
    break;
   default:
    str = "normal-unknown";
    value = 82;
    break;
   }
  } else if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {
   switch (context.getResources().getDisplayMetrics().densityDpi) {
   case DisplayMetrics.DENSITY_LOW:
    str = "large-ldpi";
    value = 78;
    break;
   case DisplayMetrics.DENSITY_MEDIUM:
    str = "large-mdpi";
    value = 78;
    break;
   case DisplayMetrics.DENSITY_HIGH:
    str = "large-hdpi";
    value = 78;
    break;
   case DisplayMetrics.DENSITY_XHIGH:
    str = "large-xhdpi";
    value = 125;
    break;
   case DisplayMetrics.DENSITY_XXHIGH:
    str = "large-xxhdpi";
    value = 125;
    break;
   case DisplayMetrics.DENSITY_XXXHIGH:
    str = "large-xxxhdpi";
    value = 125;
    break;
   case DisplayMetrics.DENSITY_TV:
    str = "large-tvdpi";
    value = 125;
    break;
   default:
    str = "large-unknown";
    value = 78;
    break;
   }

  } else if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
   switch (context.getResources().getDisplayMetrics().densityDpi) {
   case DisplayMetrics.DENSITY_LOW:
    str = "xlarge-ldpi";
    value = 125;
    break;
   case DisplayMetrics.DENSITY_MEDIUM:
    str = "xlarge-mdpi";
    value = 125;
    break;
   case DisplayMetrics.DENSITY_HIGH:
    str = "xlarge-hdpi";
    value = 125;
    break;
   case DisplayMetrics.DENSITY_XHIGH:
    str = "xlarge-xhdpi";
    value = 125;
    break;
   case DisplayMetrics.DENSITY_XXHIGH:
    str = "xlarge-xxhdpi";
    value = 125;
    break;
   case DisplayMetrics.DENSITY_XXXHIGH:
    str = "xlarge-xxxhdpi";
    value = 125;
    break;
   case DisplayMetrics.DENSITY_TV:
    str = "xlarge-tvdpi";
    value = 125;
    break;
   default:
    str = "xlarge-unknown";
    value = 125;
    break;
   }
  }
// The Toast will show the Device falls in Which Categories.
Toast.makeText(MainActivity.this, ""+str, Toast.LENGTH_SHORT).show();

  return value;
 }

http://www.androidwarriors.com/2016/01/how-to-find-different-devices-screen.html


7

이 작동합니다.

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; //320
int height = dm.heightPixels; //480

4
디스플레이의 픽셀 크기는 밀도가 아닙니다.
joshperry

1
이것은 픽셀이 아닌 밀도 독립적 픽셀입니다. 그리고 320은 320px가 아닌 320dip입니다. px의 계산은 다르다. stackoverflow.com/questions/6840904/…
Lukap

7

또 다른 대답 :

/**
* @return "ldpi", "mdpi", "hdpi", "xhdpi", "xhdpi", "xxhdpi", "xxxhdpi", "tvdpi", or "unknown".
*/
public static String getDensityBucket(Resources resources) {
    switch (resources.getDisplayMetrics().densityDpi) {
        case DisplayMetrics.DENSITY_LOW:
            return "ldpi";
        case DisplayMetrics.DENSITY_MEDIUM:
            return "mdpi";
        case DisplayMetrics.DENSITY_HIGH:
            return "hdpi";
        case DisplayMetrics.DENSITY_XHIGH:
            return "xhdpi";
        case DisplayMetrics.DENSITY_XXHIGH:
            return "xxhdpi";
        case DisplayMetrics.DENSITY_XXXHIGH:
            return "xxxhdpi";
        case DisplayMetrics.DENSITY_TV:
            return "tvdpi";
        default:
            return "unknown";
    }
}

3

장치가로드 한 밀도를 얻는 또 다른 방법 :

values각 밀도에 대한 폴더 생성

  • 값 (기본 mdpi)
  • 값 -hdpi
  • 값 -xhdpi
  • 값 -xxhdpi
  • 값 -xxxhdpi

각각에 문자열 리소스를 추가하십시오 strings.xml.

<string name="screen_density">MDPI</string>    <!-- ..\res\values\strings.xml -->
<string name="screen_density">HDPI</string>    <!-- ..\res\values-hdpi\strings.xml -->
<string name="screen_density">XHDPI</string>   <!-- ..\res\values-xhdpi\strings.xml -->
<string name="screen_density">XXHDPI</string>  <!-- ..\res\values-xxhdpi\strings.xml -->
<string name="screen_density">XXXHDPI</string> <!-- ..\res\values-xxxhdpi\strings.xml -->

그런 다음 단순히 문자열 리소스를 얻으면 밀도가 있습니다.

String screenDensity = getResources().getString(R.string.screen_density);

밀도가보다 큰 경우 XXXHDPI, 그것은을 기본값으로 XXXHDPI하거나보다 낮은 경우 HDPI가 기본값으로 설정됩니다MDPI

R.strings.screen_density 값

LDPI내 유스 케이스에는 필요하지 않기 때문에 생략했습니다 .


이것이 밀도를 얻는 올바른 방법이라고 생각합니다. getResources (). getDisplayMetrics (). density를 사용하기 때문에 설정에서 디스플레이 크기를 변경하면 밀도가 변경됩니다.
판타지 팡

1

이 시도...

코 틀린에서

fun determineScreenDensityCode(): String {
      return when (resources.displayMetrics.densityDpi) {
         DisplayMetrics.DENSITY_LOW -> "ldpi"
         DisplayMetrics.DENSITY_MEDIUM -> "mdpi"
         DisplayMetrics.DENSITY_HIGH -> "hdpi"
         DisplayMetrics.DENSITY_XHIGH, DisplayMetrics.DENSITY_280 -> "xhdpi"
         DisplayMetrics.DENSITY_XXHIGH, DisplayMetrics.DENSITY_360, DisplayMetrics.DENSITY_400, DisplayMetrics.DENSITY_420 -> "xxhdpi"
         DisplayMetrics.DENSITY_XXXHIGH, DisplayMetrics.DENSITY_560 -> "xxxhdpi"
         else -> "Unknown code ${resources.displayMetrics.densityDpi}"
     }
}

당신은 호출 할 수 println("density: ${determineScreenDensityCode()}") 있으며 출력은System.out: density: xxxhdpi


0

모듈에서 DPI에 액세스하기 위해 다음 코드를 사용하고 있습니다 (컨텍스트 객체에 액세스 할 필요가 없음).

(Resources.getSystem().getDisplayMetrics().xdpi
Resources.getSystem().getDisplayMetrics().ydpi)/2

0

안드로이드에서는 다음과 같이 화면 밀도를 얻을 수 있습니다.

public static String getScreenDensity(Context context)
{
    String density;
    switch (context.getResources().getDisplayMetrics().densityDpi)
    {
        case DisplayMetrics.DENSITY_LOW:
            density = "LDPI";
            break;
        case DisplayMetrics.DENSITY_140:
            density = "LDPI - MDPI";
            break;
        case DisplayMetrics.DENSITY_MEDIUM:
            density = "MDPI";
            break;
        case DisplayMetrics.DENSITY_180:
        case DisplayMetrics.DENSITY_200:
        case DisplayMetrics.DENSITY_220:
            density = "MDPI - HDPI";
            break;
        case DisplayMetrics.DENSITY_HIGH:
            density = "HDPI";
            break;
        case DisplayMetrics.DENSITY_260:
        case DisplayMetrics.DENSITY_280:
        case DisplayMetrics.DENSITY_300:
            density = "HDPI - XHDPI";
            break;
        case DisplayMetrics.DENSITY_XHIGH:
            density = "XHDPI";
            break;
        case DisplayMetrics.DENSITY_340:
        case DisplayMetrics.DENSITY_360:
        case DisplayMetrics.DENSITY_400:
        case DisplayMetrics.DENSITY_420:
        case DisplayMetrics.DENSITY_440:
            density = "XHDPI - XXHDPI";
            break;
        case DisplayMetrics.DENSITY_XXHIGH:
            density = "XXHDPI";
            break;
        case DisplayMetrics.DENSITY_560:
        case DisplayMetrics.DENSITY_600:
            density = "XXHDPI - XXXHDPI";
            break;
        case DisplayMetrics.DENSITY_XXXHIGH:
            density = "XXXHDPI";
            break;
        case DisplayMetrics.DENSITY_TV:
            density = "TVDPI";
            break;
        default:
            density = "UNKNOWN";
            break;
    }

    return density;
}

그리고 Kotlin에서 다음과 같이 :

fun getScreenDensity(context: Context): String {
    val density: String
    when (context.resources.displayMetrics.densityDpi) {
        DisplayMetrics.DENSITY_LOW -> density = "LDPI"
        DisplayMetrics.DENSITY_140 -> density = "LDPI - MDPI"
        DisplayMetrics.DENSITY_MEDIUM -> density = "MDPI"
        DisplayMetrics.DENSITY_180, DisplayMetrics.DENSITY_200, DisplayMetrics.DENSITY_220 -> density = "MDPI - HDPI"
        DisplayMetrics.DENSITY_HIGH -> density = "HDPI"
        DisplayMetrics.DENSITY_260, DisplayMetrics.DENSITY_280, DisplayMetrics.DENSITY_300 -> density = "HDPI - XHDPI"
        DisplayMetrics.DENSITY_XHIGH -> density = "XHDPI"
        DisplayMetrics.DENSITY_340, DisplayMetrics.DENSITY_360, DisplayMetrics.DENSITY_400, DisplayMetrics.DENSITY_420, DisplayMetrics.DENSITY_440 -> density =
            "XHDPI - XXHDPI"
        DisplayMetrics.DENSITY_XXHIGH -> density = "XXHDPI"
        DisplayMetrics.DENSITY_560, DisplayMetrics.DENSITY_600 -> density = "XXHDPI - XXXHDPI"
        DisplayMetrics.DENSITY_XXXHIGH -> density = "XXXHDPI"
        DisplayMetrics.DENSITY_TV -> density = "TVDPI"
        else -> density = "UNKNOWN"
    }

    return density
}

새로운 밀도가 추가 되었는지 정기적으로 확인하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.