Ответ 1
Не так много можно сделать, кроме как справиться с этим изящно. Если плотность равна нулю или 0 проверяет ее и использует значение по умолчанию в этом случае.
Плотность устройства возвращает 0 с некоторых устройств. Для расчета плотности устройства используется следующий код:
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);
density = metrics.density;
Это привело к некоторым сбоям в PlayStore. Пользователи, похоже, используют: Galaxy Y Plus; Android 4.0.3 - 4.0.4. У устройства, называемого wing-k70, были проблемы. В одном крушении это была версия 4.2.
Пожалуйста, совет.
Не так много можно сделать, кроме как справиться с этим изящно. Если плотность равна нулю или 0 проверяет ее и использует значение по умолчанию в этом случае.
Хорошим способом получения DPI является создание файла string.xml для каждой плотности.
Создайте папки с именем values-mdpi, values-hdpi, values-xhdpi... и добавьте strings.xml во всех, со строкой с плотностью со значением плотности (mdpi для strings.xml, расположенной в значениях - mdpi и т.д.)
тогда чтение R.string.density даст вам правильную плотность
Этот способ работает для меня в API уровня 4 или выше.:
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
DisplayMetrics metrics = getResources().getDisplayMetrics();
int densityDpi = (int)(metrics.density * 160f);