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

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

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

Solutions Collecting From Web of "如何为布局设置不同的主题"

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

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

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

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

有了支持库,你可以做:

 app:theme="R.style.MyTheme"