2011-10-15 6 views
10

Ho un set di applicazioni simili. Ho estratto risorse e codice comuni nel progetto della biblioteca e le applicazioni hanno appena scavalcato quello di cui hanno bisogno. Nella mia biblioteca c'è il seguente stile definito:Come sovrascrivere (o nascondere) gli attributi di stile definiti nel progetto di libreria 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> 

Come si può vedere in essa contenuti android:layout_toRightOf attributo come questo stile sarebbe applicato al testo nella riga ListView che dovrebbe essere visualizzato a destra dell'immagine in quel riga.
Tuttavia in una delle mie applicazioni mi piacerebbe visualizzare il testo sotto l'immagine. Come deve essere definito lo stile ListItemText in quell'applicazione per sovrascrivere il valore dell'attributo android:layout_toRightOf e sostituirlo con android:layout_below?

Se io definisco come:

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

visualizza testo alla destra e sotto l'immagine, in modo efficace riassumendo gli attributi di entrambe le biblioteche e gli stili di applicazione XMLs.

p.s .: Una possibile soluzione del mio problema sarebbe quella di eliminare lo android:layout_toRightOf negli stili e spostarlo invece sul layout xml. Quindi nell'applicazione di destinazione questo layout può essere ridefinito/sovrascritto. Ma sto cercando una soluzione basata sullo stile, dal momento che potrebbe fornire un metodo più semplice e diretto per l'override degli attributi.
(È inoltre possibile utilizzare lo stile ereditato con l'attributo parent, ma ciò richiederebbe nuovamente la sovrascrittura del layout nell'applicazione, che cerco di evitare).

+0

Sto facendo qualcosa di simile QUI !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

risposta

6

Per disabilitare android:layout_toRightOf, è possibile impostarlo su @null. Se la tua app definisce lo stile ListItemText come segue, dovrebbe funzionare come vuoi:

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

Funziona come previsto, grazie. Questo riferimento a '@ null' è specificato da qualche parte nella documentazione? – Idolon

+1

Non in alcun posto ovvio, per quanto ne so, ma è menzionato, come qui ad esempio: http://developer.android.com/resources/articles/window-bg-speed.html –

0

È possibile utilizzare "parent" per derivare uno stile specializzato (vedere http://developer.android.com/guide/topics/ui/themes.html) ma definire i layout come questo con gli stili non mi sembra il modo per ritagliare questo problema. Va bene lasciare alcune informazioni di layout nei file di layout.

+0

Sì, so di "genitore". Ma non sarà di aiuto nel mio caso poiché il layout è definito all'interno della libreria e fa riferimento allo stile 'ListItemText'. Potrei ridefinire lo stile nell'applicazione ovviamente (vedi la mia p.s.), ma vorrei sapere se è possibile una soluzione basata sullo stile. – Idolon