How to set a different theme to a Layout

Mister Smith picture Mister Smith · Aug 29, 2013 · Viewed 28.4k times · Source

I've set a default theme for the whole app. It's defined in styles.xml as follows:

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

I've also defined a dark theme:

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

In the manifest it is declared the light theme as the main theme for the app:

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

Now this is working fine, but in an activity, I need to set a different theme for a single Layout. Something like this:

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

In the layout xml file I'm trying to set a theme for the rightmost child LinearLayout:

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

I'd expect this to work just fine, and to apply the dark theme to the right layout only (and its child views), but it is not working. I've tried replacing the @style with a built-in @android:style to no avail. I've tested this in the layout editor and on real device/simulator.

Is it possible to apply a custom theme or style to a single layout?

Answer

Miro Markaravanes picture Miro Markaravanes · Jul 17, 2015

This is now possible by using the android:theme property on the view and setting it to any theme you like. Note that the child views will inherit the theme of their parent.