2011-10-15 8 views
10

Tengo un conjunto de aplicaciones similares. Extraje los recursos y el código comunes para el proyecto de la biblioteca y las aplicaciones simplemente anulan lo que necesitan. En mi biblioteca existe el siguiente estilo definido:Cómo anular (u ocultar) los atributos de estilo definidos en el proyecto de la biblioteca de Android?

<style name="ListItemText"> 
    <item name="android:layout_toRightOf">@id/preview_image</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textSize">@dimen/previewTextSize</item> 
</style> 

Como se puede ver que contiene android:layout_toRightOf atributo ya que este estilo se aplica al texto en la fila ListView que debe ser representada a la derecha de la imagen en la que se fila.
Sin embargo, en una de mis aplicaciones me gustaría mostrar el texto debajo de la imagen. ¿Cómo se debe definir el estilo ListItemText en esa aplicación para anular el valor del atributo android:layout_toRightOf y reemplazarlo por android:layout_below?

Si yo defino como:

<style name="ListItemText"> 
    <item name="android:layout_below">@id/preview_image</item> 
</style> 

que muestra el texto a la derecha y debajo de la imagen, sumando efectivamente los atributos de ambos estilos aplicación de biblioteca y XMLs.

p.s .: Una posible solución a mi problema sería deshacerse de android:layout_toRightOf en los estilos y moverlo al formato xml. Luego, en la aplicación de destino, este diseño se puede redefinir/anular. Pero estoy buscando una solución basada en el estilo, ya que podría proporcionar una forma más simple y directa de anulación de atributos.
(también puedo usar el estilo heredado con el atributo parent, pero esto requeriría de nuevo una anulación de diseño en la aplicación, que trato de evitar).

+0

estoy haciendo algo similar aquí !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

Respuesta

6

Para deshabilitar android:layout_toRightOf, puede configurarlo en @null. Si la aplicación define el estilo ListItemText de la siguiente manera, que debería funcionar como desee:

<style name="ListItemText"> 
    <item name="android:layout_toRightOf">@null</item> 
    <item name="android:layout_below">@id/preview_image</item> 
</style> 
+0

Funciona según lo previsto, gracias. ¿Esta referencia '@ null' está especificada en algún lugar de la documentación? – Idolon

+1

No está en ningún lugar obvio hasta donde yo sé, pero se menciona, como aquí, por ejemplo: http://developer.android.com/resources/articles/window-bg-speed.html –

0

Puede usar "padre" para derivar un estilo especializado (consulte http://developer.android.com/guide/topics/ui/themes.html), pero la definición de diseños como este con estilos no me parece la forma de descifrar este problema. Está bien dejar algo de información de diseño en los archivos de diseño.

+0

Sí, sé sobre "padre". Pero no ayudará en mi caso ya que el diseño se define dentro de la biblioteca y hace referencia al estilo 'ListItemText'. Podría redefinir el estilo en la aplicación del curso (ver mis p.s.), pero me gustaría saber si la solución basada en el estilo es posible. – Idolon

Cuestiones relacionadas