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);
Другие вопросы по тегам