如何为布局设置不同的主题

Mis*_*ith 31 user-interface android themes styles android-linearlayout

我为整个应用设置了默认主题.它在styles.xml中定义如下:

    <style name="DefaultTheme" parent="@android:style/Theme.Holo.Light">
        <!-- Customization here -->
    </style>
Run Code Online (Sandbox Code Playgroud)

我还定义了一个黑暗的主题:

    <style name="DarkTheme" parent="@android:style/Theme.Holo">
        <!-- Customization here -->
    </style>
Run Code Online (Sandbox Code Playgroud)

在清单中,它被声明为轻主题作为应用程序的主题:

    <application
    ...
    android:theme="@style/DefaultTheme" >
Run Code Online (Sandbox Code Playgroud)

现在这个工作正常,但在一个活动中,我需要为单个布局设置不同的主题.像这样的东西:

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

在布局xml文件中,我正在尝试为最右边的子项LinearLayout设置主题:

    <LinearLayout
    style="@style/DarkTheme">
    ...
Run Code Online (Sandbox Code Playgroud)

我希望这个工作得很好,并且只将黑暗主题应用于正确的布局(及其子视图),但它不起作用.我尝试用内置的@android:样式替换@style无济于事.我已经在布局编辑器和真实设备/模拟器上测试了这个.

是否可以将自定义主题或样式应用于单个布局?

Mir*_*nes 29

现在可以使用android:theme视图上的属性并将其设置为您喜欢的任何主题.请注意,子视图将继承其父级的主题.

  • 我怎样才能以编程方式做到这一点? (4认同)
  • 截至Android Marshmallow (3认同)

Pon*_*pat 11

AFAIK您无法使用XML将主题应用于布局.

但是,您可以ContextThemeWrapper()在以编程方式创建布局时使用应用主题.

LinearLayout darkThemeLayout = new LinearLayout(new ContextThemeWrapper(context, R.style.DarkTheme));
Run Code Online (Sandbox Code Playgroud)


Shu*_*ary 6

使用支持库,您可以:

app:theme="R.style.MyTheme"
Run Code Online (Sandbox Code Playgroud)