Short проблемаAndroid: DisplayMetrics densityDpi возвращает ноль на укорененных устройств
DisplayMetrics.densityDpi кажется равным нулю на укорененных устройств.
Длинной проблема
Я использую следующий код в моем приложении:
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;
}
Я использую это масштабировать иконки быть сделана моим приложением во время выполнения и масштаба иконки я получаю от других приложений , поскольку они не всегда соответствуют размеру.
Это работает отлично, но на (некоторых) укоренившихся устройствах, похоже, терпит неудачу. Размер возвращается как ноль, поэтому из кода мы можем заключить, что metrics.densityDpi должен быть равен нулю. (У меня нет корневого телефона, чтобы проверить это)
Я просмотрел раздел манифеста <supports-screens>
, но мне кажется, что значения по умолчанию - это те, которые мне нужны.
Кто-нибудь знает причину, по которой это происходит, и, возможно, исправить?
Спасибо
Использование 'density' также работало для меня, когда я столкнулся с этой проблемой в эмуляторе Genymotion с разрешением 240x320. – Sam