Как определить файл ресурса в использовании?

Иметь несколько ресурсов файлов изображений, например, image01.png, image02.png....

Я установил папки ресурсов с различными квалификаторами локали / разрешения / ориентации, например

/res/drawable-en-mdpi-port
/res/drawable-en-mdpi-land
/res/drawable-fr-hdpi-port...........

Файлы изображений у каждого различаются (соотношение сторон / разрешение / локаль-специфичное изображение)

Есть ли способ программно определить, какой файл ресурсов используется в приложении? Мне было бы полезно для тестирования отправить его в журнал отладки, поэтому можно быть уверенным, что используется правильный файл изображения, т.е. я правильно настроил квалификаторы ресурса и поместил правильные изображения в правильные папки.

Можно сделать это вручную, но с увеличением количества изображений это становится основной работой.

Из подобных вопросов об определении путей к ресурсам я догадываюсь, что это может оказаться невозможным. Если нет, есть ли у кого-нибудь хитрости / советы? Я мог бы добавить идентификационный текст к изображению (возможно, даже использовать сценарий для пакетной обработки изображений водяных знаков с именем файла), но был бы рад услышать, если есть более простой способ.

3 ответа

Решение

Если вам интересно, для чего загружается файл PNG, который в данный момент (с текущей конфигурацией), скажем, скажем, R.drawable.icon, вы можете сделать это:

TypedValue returnedValue = new TypedValue();
getResources().openRawResource(R.drawable.icon, returnedValue);
Log.d("Example", "Path to loaded resource: " + returnedValue.string);

на устройстве hdpi вывод будет:

D/Example ( 2028): Path to loaded resource: res/drawable-hdpi/icon.png

Это даст вам путь к фактическим ресурсам, используемым независимо от того, насколько сложен этот путь. Он работает только для ресурсов, которые являются отдельными файлами в вашем.apk, но наиболее заметно - для рисования.

Обычно файлы ресурсов выбираются автоматически, если в вашем приложении соблюдаются соглашения об именах папок Android, в противном случае вы можете получить разрешение экрана, высоту экрана и ширину экрана и т. Д. В упражнении с помощью приведенных ниже API.

 ActivityContext.getResources().so on, press ctrl+space in eclipse for help      
 ActivityContext.getWindow().so on, press ctrl+space in eclipse for help

Вы можете сделать это с помощью этого, но это работает, только если вы следуете соглашениям об именах папок Android

 switch (getResources().getDisplayMetrics().densityDpi) {
                    case DisplayMetrics.DENSITY_LOW:
                        //Ldpi
                        break;
                    case DisplayMetrics.DENSITY_MEDIUM:
                        //Mdpi
                        break;
                    case DisplayMetrics.DENSITY_HIGH:
                        //Hdpi
                        break;
                    case DisplayMetrics.DENSITY_XHIGH:
                        //x-hdpi
                        break;
                    }
Другие вопросы по тегам