Android: программно получить res drawable- имя
Есть ли способ программно определить, какой каталог drawable-dpi используется устройством?
3 ответа
Уходя из DisplayMetrics
Я написал это, чтобы отобразить имя каталога drawable, используемого текущим устройством:
private String getDisplayDirectory() {
String prefix = "drawable";
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
if (metrics.densityDpi == DisplayMetrics.DENSITY_LOW)
return prefix+"-ldpi";
if (metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM)
return prefix+"-mdpi";
if (metrics.densityDpi == DisplayMetrics.DENSITY_TV)
return prefix+"-tv";
if (metrics.densityDpi == DisplayMetrics.DENSITY_HIGH)
return prefix+"-hdpi";
if (metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH)
return prefix+"-xhdpi";
if (metrics.densityDpi == DisplayMetrics.DENSITY_XXHIGH)
return prefix+"-xxhdpi";
if (metrics.densityDpi == DisplayMetrics.DENSITY_XXXHIGH)
return prefix+"-xxxhdpi";
return prefix;
}
Вы должны быть в состоянии создать Resources
объект, как показано в этом вопросе о локализации, используя модифицированный DisplayMetrics
объект.
Читая ваш вопрос еще раз, если вы хотите получить только тип экрана, а не сами ресурсы, вы можете заполнить свой DisplayMetrics
использование объекта getWindowManager().getDefaultDisplay().getMetrics(metrics);
как показано в связанном примере, затем оцените density
переменная экземпляра.
Вы можете использовать DisplayMetrics, чтобы определить это.
DisplayMetrics metrics = getResources().getDisplayMetrics()
switch (metrics.densityDpi) {
case DisplayMetrics.DENSITY_HIGH: {
// Do your stuff if density is high
break;
}
case DisplayMetrics.DENSITY_MEDIUM: {
// Do your stuff if density is medium
break;
}
...
}
Кроме того, вы также можете использовать следующее для получения метрик:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);