Sintaxis para recuperar valor de recursos de estilo anidado?

Dado que DrawerLayout es parte del cromo de una actividad de Android, un color de fondo probable para el cajón parecería ser el color de fondo de la barra de acción, por lo que coinciden. Por lo tanto, me gustaría configurar el ListView que es el contenido del cajón para tener el mismo color de fondo que la barra de acción, y me gustaría hacer eso en el XML de diseño que define el ListView .

Y aquí me pierdo en el laberinto de pequeños pasajes tortuosos que es el sistema de estilo Android …

?android:attr/ syntax te permite referir, por referencia, a un valor definido en el tema que está siendo utilizado por la actividad (por ejemplo ?android:attr/activatedBackgroundIndicator como fondo para una fila de elemento de lista para trabajar con el Estado "activado").

Sé que android:actionBarStyle es donde un tema apunta al estilo que se usará para android:actionBarStyle la barra de acción en sí, y en ese estilo anidado (?), android:background es el fondo utilizado para la barra de acción.

Lo que no sé es cómo crear un ?android:attr/ , que se aplicará a un ListView , que extrae el fondo del estilo definido de la barra de acción.

es posible? Si es así, ¿cuál es la sintaxis?

Mi conjetura es que esto no es posible, que es porqué la muestra oficial de DrawerLayout codifica el color de fondo …

¡Gracias!

No es posible desafortunadamente a través de XML.

Podría hacer lo siguiente en código (no probado, pero debería funcionar):

 // Need to manually create android.styleable.ActionBar. // If you need other attributes, add them int[] android_styleable_ActionBar = { android.R.attr.background }; // Need to get resource id of style pointed to from actionBarStyle TypedValue outValue = new TypedValue(); getTheme().resolveAttribute(android.R.attr.actionBarStyle, outValue, true); // Now get action bar style values... TypedArray abStyle = getTheme().obtainStyledAttributes(outValue.resourceId, android_styleable_ActionBar); // background is the first attr in the array above so it's index is 0. Drawable bg = abStyle.getDrawable(0); abStyle.recycle(); 

AFAICT simplemente no es posible usar cualquier sintaxis de ?android:attr para dirigir el fondo de la barra de acción, simplemente porque no existe tal atributo exportado en el attrs.xml relacionado . Debería agregar / definir dicho atributo en su tema personalizado, luego usar una referencia En sus estilos / diseños. P.ej:

-attrs.xml:

 <declare-styleable name="CustomTheme"> <attr name="actionbarBackground" format="reference"/> </declare-styleable> 

-meses.xml

 <style name="CustomTheme" parent="Theme.Holo.Light"> ... <item name="actionbarBackground">@color/your_fav_color</item> <item name="android:actionBarStyle">@style/CustomActionbar</item> ... </style> 

-styles.xml

 ... <style name="CustomActionbar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">?attr/actionbarBackground</item> .... </style> 
  • ¿Qué significa el valor Integer en android: theme?
  • Buscar dinámicamente el nombre del tema en la aplicación de Android
  • Obtener atributos temáticos mediante programación
  • Android app onStartup - Pantalla blanca
  • Android: Theme.Holo.Light.NoActionBar vs Theme.Light.NoTitleBar
  • ¿Cómo cambio el color de acento en las alertas de tema material de Android?
  • Implementación de la elección por el usuario del tema
  • Tema predeterminado de Android
  • Cambiar el color de resaltado del elemento seleccionado para el menú del menú de menú duro
  • Vista previa de tema falla en Eclipse
  • ¿Cuándo se debe usar Theme.AppCompat vs ThemeOverlay.AppCompat?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.