Método getResourceId de TypedArray

Estoy leyendo docs acerca del método getResourceId () . Dice que:

Recupera el identificador de recurso para el atributo en el índice. Tenga en cuenta que atributo recurso como resuelto cuando se recupera el objeto general TypedArray. Como resultado, esta función devolverá el identificador de recurso del valor de recurso final que se encontró, no necesariamente el recurso original que fue especificado por el atributo.

Asi que

  • El primer párrafo es claro:

Recupera el identificador de recurso para el atributo en el índice.

  • El segundo es claro también:

Tenga en cuenta que atributo recurso como resuelto cuando se recupera el objeto general TypedArray.

  • Pero ¿qué significa el párrafo 3? ¿Por qué podría devolver no necesariamente el id de recurso original ?

Como resultado, esta función devolverá el identificador de recurso del valor de recurso final que se encontró, no necesariamente el recurso original que fue especificado por el atributo.

De la documentación :

TypedArray obtainStyledAttributes (AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) 

….

Al determinar el valor final de un atributo particular, hay cuatro entradas que entran en juego:

  1. Cualesquiera valores de atributo en el AttributeSet dado.
  2. El recurso de estilo especificado en AttributeSet (denominado "style").
  3. El estilo predeterminado especificado por defStyleAttr y defStyleRes
  4. Los valores base en este tema.

Esto se debe a que la TypedArray recursos debe suceder antes de recuperar el TypedArray .

El sistema de generación de Gradle-base utiliza un nuevo mecanismo de fusión de recursos. En el sistema de compilación anterior, la fusión se realizó pasando una lista de carpetas de recursos a aapt que actuaban como superposiciones, junto con la opción –auto-add-overlay para asegurar que los nuevos recursos de las superposiciones se agregaran automáticamente (el comportamiento predeterminado es para las superposiciones es Para anular únicamente los recursos existentes, no crear nuevos).

Una de las metas del sistema de compilación basado en Gradle era proporcionar más flexibilidad, y una solicitud de característica frecuente fue la capacidad de tener más de una carpeta de recursos. Aapt no es capaz de manejar esto, por lo que el nuevo sistema de compilación introduce un nuevo mecanismo de fusión que se ejecuta antes de aapt y genera una única carpeta de recursos fusionada que se alimenta a aapt. Esta fusión tiene la ventaja de ser incremental, tanto a través de la detección de cambios de entrada / salida de Gradle, como en la forma en que se implementa (es decir, puede volver a ejecutar la fusión aplicando sólo el cambio en un solo archivo).

Los recursos combinados provienen de 3 tipos de fuentes:

  • Los recursos principales, asociados con el sourceSet principal, generalmente se encuentran en src / main / res
  • La variante se superpone, procedente del Tipo de construcción y Sabor (es).
  • Las dependencias del Proyecto Biblioteca, que aportan recursos a través de la entrada de res en su paquete aar.

Por ejemplo, si utiliza diferentes buildTypes o buildTypes , puede tener diferentes recursos para cada sabor. Así que el que se estableció originalmente en el momento del desarrollo puede ser diferente de lo que realmente se presenta después de cambiar el sabor.

  • Android drawable xml No se puede convertir a color Exception for API 10
  • Almacenamiento de IDs extraibles en una matriz XML
  • Android ImageView setImageResource en el código
  • ¿Cómo saber el ancho más pequeño (sw) del dispositivo android?
  • Android Studio: Creación de diseños de paisaje
  • Class.getResource (className) que me da NullPointerException
  • Error: no se puede encontrar la variable de símbolo abc_ic_ab_back_mtrl_am_alpha
  • Utilizar un BindingAdapter con una matriz de cadenas de los recursos
  • Los recursos no traducibles sólo deben definirse en los valores base / carpeta - Android Export APK
  • W / ResourceType (463): Error al obtener la entrada en el paquete 0 (error -75) en la actividad de Android
  • Límite de almacenamiento en la carpeta de recursos y activos en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.