2013-08-29 12 views
21

Ustawiłem domyślny motyw dla całej aplikacji. Jest zdefiniowana w styles.xml następująco:Jak ustawić inny motyw do układu

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

Ja również zdefiniowane ciemny motyw:

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

W manifeście jest zadeklarowana światła motyw jako główny motyw dla aplikacji:

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

Teraz działa dobrze, ale w działaniu muszę ustawić inny motyw dla pojedynczego układu. Coś takiego:

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

W pliku xml układ Próbuję ustawić motyw dla skrajna prawa dziecka LinearLayout:

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

będę oczekiwać tego, aby działać dobrze, i nałożenia ciemny motyw tylko do prawego układu (i jego widoków podrzędnych), ale nie działa. Próbowałem zastąpić @ style wbudowanym stylem @android: bezskutecznie. Przetestowałem to w edytorze układu i na prawdziwym urządzeniu/symulatorze.

Czy można zastosować niestandardowy motyw lub styl do jednego układu?

+0

Wiem, że to stare pytanie, udało ci się znaleźć odpowiedź na to? –

Odpowiedz

20

Jest to teraz możliwe za pomocą właściwości android:theme na widoku i ustawienie go w dowolnym tematem lubisz. Zwróć uwagę, że widoki podrzędne dziedziczą motyw ich rodzica.

+1

Od Androida Marshmallow –

12

AFAIK Nie można zastosować motywu do układu za pomocą XML.

Można jednak użyć motywu ContextThemeWrapper() do zastosowania motywu przy programowym tworzeniu układu.

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

Z biblioteki wsparcia można zrobić:

app:theme="R.style.MyTheme" 
Powiązane problemy