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

我为整个应用程序设置了一个默认的主题。 它在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"> ... 

我期望这工作得很好,并将黑暗的主题只适用于正确的布局(及其子视图),但它是行不通的。 我已经尝试用内置的@android:样式replace@style无济于事。 我已经在布局编辑器和真实设备/模拟器上testing过了。

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

  • Android的布局利润百分比
  • 如何在android中改变可绘制形状的颜色
  • Android上的LinearLayout中的CSS“float:right”属性等价吗?
  • LinearLayout里面的RelativeLayout?
  • Android ListView默认分隔符样式/属性
  • 如何在颜色状态列表资源中指定背景颜色?
  • Android:无法消除LinearLayout中图像之间的垂直间隙
  • 带孩子的自定义Android控件
  • 这现在可以通过在视图上使用android:theme属性并将其设置为任何您喜欢的主题。 请注意,子视图将inheritance父级的主题。

    AFAIK你不能使用XML将布局应用于布局。

    但是,可以使用ContextThemeWrapper()以编程方式创build布局时应用主题。

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

    有了支持库,你可以做:

     app:theme="R.style.MyTheme"