2011-07-20 12 views
12

Tengo una biblioteca de Android con temas, atributos, estilos, colores y, por supuesto, código.Reemplazando "elementos" en el estilo de Android.

Para cosas como la altura del separador, los colores de los elementos, etc., tengo la capacidad de anular las dimensiones usando dimensions.xml y color usando colors.xml (dejando los diseños, el tema y el estilo solo).

Sin embargo, si tengo un ListView que usa el list_selector_background de Android y también tengo otra actividad que usa este selector para un TextView apilable, además de sobreescribirlo en el código, no puedo encontrar una manera de hacerlo aunque utilizando el estilo:? sintaxis attrib, pero no puedo ver cómo ayuda

la solución más sencilla y más rápida actualmente tengo es crear un estilo:

<style name="ResultsListViewStyle" > 
    <item name="android:listSelector">@android:drawable/list_selector_background</item> 
</style> 

y luego copiar y pegar la pieza anterior de XML para mi proyecto real style.xml y cambiar el selector allí. Esto no es tan malo, pero sí necesito hacer esto para cada artículo usando este selector ...

+0

es posible definir en attrs.xml algo como: exterior de cláusula y luego usarlo en mi estilo de esta manera: > @attr:/my_selector " el valor en sí definiré y anularé en el theme.xml, vi que attrs.xml del android sdk hace eso – codeScriber

Respuesta

13

Dado que nadie eligió el guante, finalmente encontré la solución, de hecho como un atributo.
La solución:

  1. En su attrs.xml crear una entrada para el valor que necesita, por drawbale como seleccionador, por ejemplo, el uso: <attr name="ListResultSelector" format="reference" />

  2. En su theme.xml definen su tema, si ese atributo es su único y desea el tema normal de Android como su tema, puede usar:

    <style name="Theme" parent="@android:style/Theme.NoTitleBar"> 
        <item name="ListResultSelector">@android:drawable/list_selector_background</item> 
    </style> 
    
  3. Si desea sobrescribir en una aplicación específica, puede simplemente heredar 'tema' (<style name="Theme.newTheme">) y cambiar esa propiedad específica allí.

  4. En su estilo en lugar de definir un estirable puede definir: <....android:background="?attrib:ListResultSelector" ../>

  5. aplicar el tema ya sea para su aplicación o para la actividad correspondiente

De esta manera no necesito para anular un estilo completo, solo propiedades especiales como dibujables, tipo de caras, etc. ... dentro de él. Entonces, si alguna vez necesito cambiar algo en el estilo original y quiero que afecte tanto a las aplicaciones antiguas como a las nuevas, no es necesario que lo haga dos veces.