2013-08-29 24 views
21

Ich habe ein Standardthema für die gesamte App festgelegt. Es ist in styles.xml wie folgt definiert:So legen Sie ein anderes Thema für ein Layout fest

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

Ich habe auch ein dunkles Thema definiert:

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

Im Manifest wird das Licht Thema als das Hauptthema für die App erklärt:

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

Jetzt funktioniert das gut, aber in einer Aktivität muss ich ein anderes Thema für ein einzelnes Layout festlegen. Etwas wie folgt aus:

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

In der Layout-XML-Datei Ich versuche, ein Thema für die ganz rechts Kind Linearlayout einstellen:

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

Ich würde erwarten, dass dies gut funktionieren, und anwenden das dunkle Thema nur auf das richtige Layout (und seine untergeordneten Ansichten), aber es funktioniert nicht. Ich habe versucht, den @style mit einem eingebauten @android: Stil zu ersetzen, ohne Erfolg. Ich habe das im Layout-Editor und am realen Gerät/Simulator getestet.

Ist es möglich, ein benutzerdefiniertes Design oder einen benutzerdefinierten Stil auf ein einzelnes Layout anzuwenden?

+0

Ich weiß, es alte Frage ist, wurden Sie in der Lage, eine Antwort darauf zu finden? –

Antwort

20

Dies ist nun möglich, indem die android:theme Eigenschaft auf der Ansicht verwenden und es zu jedem Thema einstellen Sie möchten. Beachten Sie, dass die untergeordneten Ansichten das Thema ihres übergeordneten Elements erben.

+1

Ab Android Marshmallow –

12

AFAIK Sie können ein Design nicht mit XML auf das Layout anwenden.

Sie können jedoch ContextThemeWrapper() verwenden, um Thema anzuwenden, wenn Sie Layout programmgesteuert erstellen.

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

Mit Support-Bibliothek können Sie tun:

app:theme="R.style.MyTheme" 
Verwandte Themen