Selección de recursos de Android diseño y valores inconsistencias

El problema que estoy experimentando indica que el grupo de recursos que se está seleccionando para una actividad determinadalayout XML es inconsistente con los recursos seleccionados delvalues carpeta a pesar de los mismos calificadores de recursos que se utilizan en cada conjunto de carpetas.

Ejemplo

Después de colocar algún código de registro dentro de la actividad principal abstracta de mi aplicación, puedo ver que al iniciar mi aplicación con un emulador de tipo Nexus 7 (Android 4.1), el ancho más pequeño es de hecho 600dp, ellayout-sw600dp-* La carpeta se está utilizando para obtener la IU para la actividad, pero la carpeta se está utilizando para lavalues esvalues-large-*. Esperaba que esto fueravalues-sw600dp-* por lo tanto, proporcionándome la información vital sobre a qué grupo de recursos se está ejecutando la actividad.

Código haciendo el registro dentro de la actividad principal de mi aplicación para todosandroid.app.Activitys

  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()));
...

Registro de salida desde cuando ejecuto este código en un dispositivo de tipo Nexus 7;

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

Sé lo que estás pensando, ¿dónde hizo eso?diseño-gran-tierra derivación provienen de? Sigue leyendo

Fondo

Estoy probando un enfoque esbozadoaquí lo que me permitiría inspeccionar el grupo de recursos en uso en el tiempo de ejecución. Esencialmente, el enfoque que he implementado tiene la siguiente estructura de calificadores de recursos;

- 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

Así que esencialmente elvalues los calificativos reflejan el de lalayout calificativos Debajo de cada uno devalues-* carpetas que he definido un solo archivo XML llamadodevice-config.xml con contenido;

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="resourceQualifier">layout-{qualifier of values folder}</string>
</resources>

Así, por ejemplo, lavalues-sw600dp-land&nbsp;carpetadevice-config.xml&nbsp;contiene una sola cadena con valorlayout-sw600dp-land. El objetivo aquí es que mi código permanezca sincronizado con los diseños de recursos que se muestran en la pantalla. Esto es necesario para que mi código no se apague "encontrando por id" algún elemento que no exista en el diseño mostrado debido a los bienes inmuebles involucrados.

(Opcional) Razonamiento más profundo de por qué estoy haciendo esto.

El razonamiento más profundo para querer saber el cazo que se está utilizando en el tiempo de ejecución nació de la constatación de que mi código de fragmento único para todas las configuraciones se estaba volviendo difícil de manejar con varias lógicas basadas en conmutadores que no eran transparentes y, a menudo, funciones duplicadas de otros diseños ... era como si necesitara algún tipo deHerencia de fragmentos&nbsp;... que si sigues el enlace es exactamente lo que hice. La desventaja de esto es que necesito saber con qué pantalla estoy trabajando antes de indicarle al marco que ejemplifique el fragmento x, y o z, con la certeza de que el fragmento que se está creando nunca estará desincronizado con el diseño. está destinado a inflar. Esta herencia funciona y permite una pila de fragmentos mucho más manejable (Sonar también es más feliz, lo que es bueno).

Resumen

Sin embargo, esta aparente discrepancia me ha frustrado entre la carpeta de diseño y la carpeta de valores que selecciona el marco. Cada uno tiene los mismos calificadores, por lo tanto, ¿por qué una Actividad que aprovecha ellayout-sw600dp-land&nbsp;UI XML utiliza elvalues-sw600dp-land&nbsp;¿recurso? Espero haber fallado en algo porque fue la mejor solución posible publicada en la discusión de SO que vinculé anteriormente.