2015-09-26 39 views
19

Ci sono molti documenti e tutorial sulla creazione o la personalizzazione di uno stile di tema Android tramite XML, ma non sono stati in grado di trovare un modo per crearlo in codice. Qualche idea su come creare lo stile in codice piuttosto che in xml?Come creare uno stile di tema Android a livello di programmazione?

Questo è l'esempio XML, è necessario creare questa programmazione in codice:

<resources> 
    <style name="AppTheme" parent="android:Theme.Material"> 
    <item name="android:colorPrimary">@color/primary</item> 
    <item name="android:colorPrimaryDark">@color/primary_dark</item> 
    <item name="android:colorAccent">@color/accent</item> 
    </style> 
</resources> 
+0

Qualsiasi motivo per cui si desidera che venga eseguito a livello di programmazione? Se si desidera modificare dinamicamente lo stile in fase di esecuzione, è possibile controllare questo collegamento http://stackoverflow.com/questions/3241729/android-dynamically-change-style-at-runtime. E se vuoi semplicemente recuperare l'attributo di stile nel codice - controlla questo: http://stackoverflow.com/questions/13719103/how-to-retrieve-style-attributes-programatically-from-styles-xml – random

+0

@random nessun motivo specifico , stanco di xml quindi mi sto solo divertendo a vedere se è possibile creare un tema al volo – Mercury

+4

@ casuale ho una ragione. Devo dare il colore in modo dinamico, attualmente i colori non sono decisi. Quindi, scrivo temi come sopra in xml, ma voglio dare il colore dinamicamente solo alla prima schermata. In modo che dopo verrà applicato in tutto lo schermo. –

risposta

2

risposta breve: sua non è possibile come a livello di codice creare un tema & Imposta come tema l'applicazione (anche se noi raggiunto per creare un oggetto Theme) senza un ID risorsa tema.

Dettagli:

quando si chiama setTheme la funzione ineffect un metodo di ContextWrapper, che alla fine chiama AssetManager con l'indicatore di risorse id, AssetManager classe contiene il metodo per applicare tema di applicazione, che è JNI chiamata

native static final void applyThemeStyle(long theme, int res, boolean force); 

Come sopra, è possibile solo passare un ID risorsa per applicare lo stile themestyle. Ma le opzioni possibili sono

  1. Anche se è limitato alle costanti di caratteristiche di classe Window. Possiamo usare setFeatureDrawable & caratteristica costanti per impostare alcuni drawable come, FEATURE_ACTION_BAR, FEATURE_CONTEXT_MENU ecc ..
  2. Utilizzando setTheme funzione dall'attività, siamo in grado di impostare il tema da risorsa stile, che risolverà il problema menzionato nei commenti da AjaySharma & Nathan