Несоответствия в выборе ресурсов Android и их значениях

Проблема, с которой я столкнулся, указывает на то, что корзина ресурсов выбирается для данного действияlayout XML несовместим с ресурсами, выбранными изvalues папка, несмотря на одинаковые квалификаторы ресурса, используемые в каждом наборе папок.

пример

После размещения кода регистрации в моем приложенииС абстрактной родительской активностью я вижу, что при запуске моего приложения через эмулятор типа Nexus 7 (Android 4.1) наименьшая ширина действительно составляет 600 dp,layout-sw600dp-* папка используется для получения пользовательского интерфейса для действия, но папка, используемая дляvalues являетсяvalues-large-*, Я ожидал, что это будетvalues-sw600dp-* таким образом, предоставляя мне жизненно важную информацию о том, под каким ресурсом ведется деятельность.

Код делает запись в моем приложении »s родительская активность для всех sandroid.app.Activity

  protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final Configuration config = getResources().getConfiguration();
    Log.i(this.getClass().getSimpleName(), String.format("Smallest width is [%s]", config.smallestScreenWidthDp));
    configurationContext = SupportedDeviceConfiguration.fromResourceQualifer(getString(string.resourceQualifier));
    Log.i(this.getClass().getSimpleName(), String.format("Running under the [%s] configuration context.", configurationContext.getResourceQualifier()));
...

Регистрация выходных данных, когда я запускаю этот код на устройстве типа Nexus 7;

[Logging fluff] Smallest width is [600]
[Logging fluff] Running under the [layout-large-land] configuration context.

Я знаю, что ты думаешь - откуда этомакета большой земли происхождение? Читать дальше...

Фон

Я испытываю подход, изложенныйВот который позволил бы мне проверять ресурсы, используемые во время выполнения. По сути, реализованный мною подход имеет следующую структуру квалификаторов ресурсов;

- res
  + layout                   // Default portrait layout.
  + layout-land              // Default landscape layout
  + layout-large-land        // pre 3.2 phablet landscape layout (Galaxy Note at v2.3.3)
  + layout-xlarge-land       // pre 3.2 tablet landscape layout
  + layout-xlarge-port       // pre 3.2 tablet portrait layout
  + layout-sw520dp-port      // post 3.1 phablet portrait layout (Galaxy Note at v4.0.3)
  + layout-sw520dp-land      // post 3.1 phablet landscape layout
  + layout-sw600dp-port      // post 3.1 mini-tablet portrait layout (Nexus 7)
  + layout-sw600dp-land      // post 3.1 mini-tablet-landscape layout 
  + layout-sw700dp-port      // post 3.1 tablet portrait layout
  + layout-sw700dp-land      // post 3.1 tablet landscape layout
  - values                   // Contains the root strings.xml
     strings.xml
  - values-land
     default-config.xml            
  - values-large-land
     default-config.xml        
  - values-xlarge-land
     default-config.xml     
  - values-xlarge-port
     default-config.xml     
  - values-sw520dp-port
     default-config.xml     
  - values-sw520dp-land
     default-config.xml     
  - values-sw600dp-port
     default-config.xml     
  - values-sw600dp-land
     default-config.xml     
  - values-sw700dp-port
     default-config.xml     
  - values-sw700dp-land
     default-config.xml

Так по сутиvalues классификаторы отражают это изlayout классификаторы. Под каждым изvalues-* папки, которые я определил один файл XML под названиемdevice-config.xml с содержанием;



    layout-{qualifier of values folder}

Так, например,values-sw600dp-land подпапкеdevice-config.xml содержит одну строку со значениемlayout-sw600dp-land, Цель в том, чтобы мой код оставался синхронизированным с макетами ресурсов, отображаемыми на экране. Это необходимо для того, чтобы мой код нене уходипоиск по идентификатору какой-то предмет, который нене существует на отображаемом макете в связи с недвижимостью.

(Необязательно) Более глубокое обоснование того, почему я делаю это

Более глубокие соображения о желании узнать, какой контейнер используется во время выполнения, возникли из-за осознания того, что мой код с одним фрагментом для всех конфигураций становится трудным для управления с помощью различной логики на основе коммутатора, которая была непрозрачной и часто дублировала функции от другие макеты ... это было так, как будто мне нужно было какое-тоНаследование фрагментов ... что, если вы перейдете по ссылке, это именно то, что я сделал. Недостатком этого является то, что мне нужно знать, с каким экраном я работаю, прежде чем дать указание платформе создать экземпляр фрагмента x, y или z, поскольку известно, что создаваемый фрагмент никогда не будет синхронизирован с макетом, который он использует. предназначен для раздувания. Это наследование работает и позволяет получить гораздо более управляемый стек фрагментов (Сонар тоже счастливее, что приятно).

Резюме

Тем не менее, я был потрясен этим очевидным несоответствием между тем, какая папка макета и папка значений выбирается фреймворком. Каждый из них имеет одинаковые квалификаторы, поэтому почемуДеятельность, использующаяlayout-sw600dp-land Пользовательский интерфейс XML используетvalues-sw600dp-land ресурс? Я надеюсь, что яу меня что-то не так, потому что это было самое лучшее из потенциальных решений, опубликованных в обсуждении SO, на которое я ссылался выше.

Ответы на вопрос(2)

Ваш ответ на вопрос