2013-08-29 2 views
21

Я установил тему по умолчанию для всего приложения. Он определяется в styles.xml следующим образом:Как установить другую тему в макет

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

Я также определил темную тему:

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

В манифесте она объявлена ​​световую тему в качестве основной темы для приложения:

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

Теперь это работает нормально, но в действии мне нужно задать другую тему для одного макета. Что-то вроде этого:

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

В файле макет XML Я пытаюсь установить тему для ребенка самого правого LinearLayout:

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

Я бы ожидать, чтобы это работало просто отлично, и применять темная тема только в правильном макете (и его дочерние представления), но она не работает. Я попытался заменить @style на встроенный стиль @android: безрезультатно. Я тестировал это в редакторе макетов и на реальном устройстве/симуляторе.

Возможно ли применить индивидуальную тему или стиль к одному макету?

+0

Я знаю, что это старый вопрос, вы были в состоянии найти ответ на него? –

ответ

20

Теперь это возможно с помощью android:theme собственности на представлении и установив его на любую тему, вам нравится. Обратите внимание, что дочерние представления наследуют тему своего родителя.

+1

Начиная с Android Marshmallow –

12

AFAIK вы не можете применить тему к макету с использованием XML.

Однако вы можете использовать ContextThemeWrapper() для применения темы при создании макета программно.

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

С библиотекой поддержки вы можете сделать:

app:theme="R.style.MyTheme" 
Смежные вопросы