2014-12-21 2 views
1

짧은 문제안드로이드 : DisplayMetrics densityDpi이

DisplayMetrics.densityDpi은 뿌리 장치에서 제로 것 같다 뿌리 장치에 0을 반환합니다.

내 응용 프로그램에서 다음 코드를 사용하고

긴 문제 : 내가 런타임 및 규모 아이콘 중 내 응용 프로그램에 의해 만들어지고 아이콘을 확장하려면이 옵션을 사용

public static int getIconSize(Activity activity) { 

    int size; 

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

    switch (metrics.densityDpi) { 
    case DisplayMetrics.DENSITY_LOW: 
     size = 36; 
     break; 
    case DisplayMetrics.DENSITY_MEDIUM: 
     size = 48; 
     break; 
    case DisplayMetrics.DENSITY_TV: 
     size = 64; 
     break; 
    case DisplayMetrics.DENSITY_HIGH: 
     size = 72; 
     break; 
    case DisplayMetrics.DENSITY_XHIGH: 
     size = 96; 
     break; 
    case DisplayMetrics.DENSITY_400: 
     size = 120; 
     break; 
    case DisplayMetrics.DENSITY_XXHIGH: 
     size = 144; 
     break; 
    case DisplayMetrics.DENSITY_560: 
     size = 168; 
     break; 
    case DisplayMetrics.DENSITY_XXXHIGH: 
     size = 192; 
     break; 
    default: 
     size = (int) (metrics.densityDpi * (3/10)); 
    } 
    return size; 
} 

내가 다른 응용 프로그램에서 얻을 , 그들은 항상 적당한 크기가 아니기 때문에.

위대한 작품이지만 (일부) 루팅 된 장치에서는 실패한 것 같습니다. 크기는 0으로 반환되므로 코드에서 metrics.densityDpi가 0이어야한다고 결론을 내릴 수 있습니다. (나는 이것을 테스트하기 위해 뿌리깊은 전화가 없다)

나는 매니 페스트의 <supports-screens> 섹션을 들여다 보았지만, 필자가 필요로하는 것은 디폴트 값처럼 보인다.

누구에게 이런 일이 일어나는 이유와 수정 사항을 알고 있습니까?

은 뿌리 전화가 항상 densityDpi의 값을 반환하지 않는 것처럼

답변

2

이 보인다 주셔서 감사합니다. 내 질문에 코드 끝에이 추가하여이 문제를 해결했습니다. 밀도가 올바르게 반환되는 것 같습니다.

if (size == 0) { 
     size = (int) (metrics.density * 48); 
    } 
+0

240320 해상도의 Genymotion 에뮬레이터에서이 문제가 발생했을 때 '밀도'를 사용하면 효과적이었습니다. – Sam

관련 문제