Как получить квалификаторы для данного ресурса (при его использовании)?

У меня очень простой вопрос:

Учитывая конкретный ресурс (id, string, drawable,...) из файла R.java, можно ли узнать, какие квалификаторы в его папке соответствовали ему? Если да, то как?

Например, если у моего устройства есть экран с плотностью hdpi, и у меня одинаковое имя файла "x.png" на "res/drawable-hdpi" и "res/drawable-mdpi", и я собираюсь декодировать этот файл , то, что я хотел бы получить, это то, что он получил файл из res/drawable-hdpi и, делая это, знает, что он имеет плотность hdpi.

Конечно, в этом примере, если файл существует в других папках, но не в папке hdpi, я бы хотел, чтобы он сказал мне, какой из них будет использоваться при декодировании файла.

То же самое касается остальных квалификаторов (locale, screenSize,...).


person android developer    schedule 28.05.2013    source источник
comment
Меня интересует этот вопрос. Я в той же проблеме. Вы решили это? Вы нашли функцию угадывания квалификатора, используемого устройством в любой ситуации?   -  person GmloMalo    schedule 23.08.2015
comment
@GmloMalo Нет. Я даже не помню, зачем мне это нужно...   -  person android developer    schedule 23.08.2015
comment
@GmloMalo Извините за это. Если вы узнали об этом, пожалуйста, напишите это здесь. Это может быть полезно в будущем, или просто приятно знать.   -  person android developer    schedule 23.08.2015


Ответы (3)


используйте http://developer.android.com/reference/android/content/res/Configuration.html

пример для dpi:

    Configuration config = getResources().getConfiguration();
    Log.d("DPI ", Integer.toString(config.densityDpi));
person Novikov    schedule 07.10.2015
comment
Где та часть, которую я даю вам идентификатор ресурса? В настоящее время все, что я вижу, это то, что вы определили плотность устройства. Это не имеет ничего общего с данным ресурсом. - person android developer; 07.10.2015
comment
это, вы можете просмотреть dpi в цифрах. stackoverflow .com/questions/2025282/ проверьте dpi с конфигурацией и известным ковшом плотности для вашего телефона. - person Novikov; 08.10.2015
comment
Вы не понимаете вопроса. Я не прошу плотности. Спрашиваю, как получить исходную папку ресурса, который я выбираю. Например, если у меня есть drawable внутри нескольких папок (drawable-ldpi, drawable-port, drawable-iw,...), я хочу найти, какой из файлов он выбрал, когда я пытаюсь его получить. - person android developer; 08.10.2015
comment
хорошо, извините, но если вы используете квалификатор только плотности (hdpi, xhdpi и т. д.) для папки с возможностью рисования, мой метод должен идти с - person Novikov; 09.10.2015
comment
Нет, потому что он не будет знать, какой файл он использовал, а только какой файл подходит лучше всего, если он доступен. - person android developer; 09.10.2015

Эта проблема часто возникает, если вы ориентируетесь на большое количество устройств, поэтому я решил создать собственное простое приложение, чтобы узнать, какой из них используется. Вот ссылка.

Надеюсь, это поможет.

person bladeX    schedule 28.05.2013

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

Но вы всегда можете сформулировать правила на основе правил, указанных в документации к квалификаторам ресурсов Android.

Однако мне не ясно, каково именно ваше требование? Вы хотите, чтобы ваше приложение могло распознавать, какой ресурс используется? Или вы хотите это только во время проектирования/сборки.

Что касается выяснения того, какой ресурс используется, вы можете легко сформулировать логику, основанную на плотности экрана, размере экрана, текущей локали телефона и текущей ориентации, которые доступны через различные API, присутствующие в Android.

person Sam    schedule 28.05.2013
comment
предположим, что код ничего не знает о том, какие файлы ресурсов существуют, я хочу иметь функцию, которая сообщит, какие квалификаторы используются для данного ресурса. это для времени выполнения (потому что иначе я сам вижу, где файлы...). - person android developer; 28.05.2013
comment
это, на мой взгляд, невозможно... лучшее, что вы можете сделать, это знать, какие ресурсы вы поместили в каждую папку с предоставленными вами классификаторами. В зависимости от метрик устройства, которые я упомянул, вы можете предположить, какой ресурс используется вашим приложением. Я не думаю, что вы можете узнать, какие квалификаторы присутствуют для того или иного ресурса, что бы это делала система андроида, а не ваше приложение. - person Sam; 29.05.2013