Как определить файл ресурса в использовании?
Иметь несколько ресурсов файлов изображений, например, 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;
}