2013-08-29 11 views
21

Ho impostato un tema predefinito per l'intera app. E 'definita in styles.xml come segue:Come impostare un tema diverso su un layout

<style name="DefaultTheme" parent="@android:style/Theme.Holo.Light"> 
     <!-- Customization here --> 
    </style> 

Ho anche definito un tema scuro:

<style name="DarkTheme" parent="@android:style/Theme.Holo"> 
     <!-- Customization here --> 
    </style> 

Nel manifesto si dichiara il tema della luce come il tema principale per l'applicazione:

<application 
    ... 
    android:theme="@style/DefaultTheme" > 

Ora funziona bene, ma in un'attività, ho bisogno di impostare un tema diverso per un singolo Layout. Qualcosa di simile a questo:

+--------------------------------------------------+ 
    |   Parent Linear layout (default theme)  | 
    |             | 
    | +------------------------------------+ +-------+ | 
    | |         | |  | | 
    | |  Left linear layout    | |  | | 
    | |  (default theme)    | |  | | 
    | |         | |  | | 
    | |         | |  | | 
    | |         | | ·<----------- Right Linear Layout 
    | |         | |  | |  (Need it in dark theme) 
    | |         | |  | | 
    | |         | |  | | 
    | +------------------------------------+ +-------+ | 
    +--------------------------------------------------+ 

Nel file di layout xml Sto cercando di impostare un tema per il bambino più a destra LinearLayout:

<LinearLayout 
    style="@style/DarkTheme"> 
    ... 

mi aspetto questo lavoro bene, e da applicare il tema scuro solo sul layout corretto (e le sue viste figlio), ma non funziona. Ho provato a sostituire @style con uno stile @android incorporato: inutilmente. L'ho provato nell'editor di layout e sul dispositivo/simulatore reale.

È possibile applicare un tema o uno stile personalizzato a un singolo layout?

+0

So che è vecchia questione, sono stati in grado di trovare una risposta ad esso? –

risposta

20

Questo è ora possibile utilizzando la proprietà android:theme sulla vista e l'impostazione a qualsiasi tema che ti piace. Nota che le viste secondarie erediteranno il tema del loro genitore.

+1

A partire da Android Marshmallow –

12

AFAIK non è possibile applicare un tema al layout utilizzando XML.

Tuttavia, è possibile utilizzare ContextThemeWrapper() per applicare il tema quando si crea il layout a livello di programmazione.

LinearLayout darkThemeLayout = new LinearLayout(new ContextThemeWrapper(context, R.style.DarkTheme)); 
5

Con libreria di supporto che si può fare:

app:theme="R.style.MyTheme"