从两个父主题inheritance的Android XML主题?

Android的风格和主题似乎总是让我的头脑旋转。 我想在不同版本的Android上使用Holo UI来显示我的应用程序。 所以我决定通过浏览源代码来提取必要的资源。

我遇到了android-15\data\res\values\themes.xml ,我很困惑,究竟是什么被“inheritance”,从哪里:

 <style name="Theme.Holo.Light" parent="Theme.Light"> ... ... </style> 

Android API指南说:

如果您想从自己定义的样式inheritance,则不必使用parent属性。 相反,只需将要inheritance的样式的名称作为新样式的名称(用句点分隔)即可。

但从上面的代码看来, Theme.Holo.Light似乎是从Theme.HoloTheme.Lightinheritance的。

这是如何工作,或者我没有正确阅读?

Solutions Collecting From Web of "从两个父主题inheritance的Android XML主题?"

我一直在想这个,所以我写了一个简单的testing应用程序来尝试。 资源文件如下所示:

 <!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name="AppBaseTheme" parent="android:Theme"> <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> </style> <style name="AppTheme.TestTheme" parent="android:Theme.Light"> </style> 

所以我将AppTheme.TestTheme应用于清单文件中的活动。 AppTheme使窗口全屏,没有标题栏。 Theme.Light使窗口背景灯而不是默认的黑暗。 当指定parent="android:Theme.Light"属性时,窗口是白色而不是全屏 – 这意味着parent="..."属性优先于名称前缀,并且层次似乎是TestTheme <- Theme.Light (light) <- Theme (dark)

随着父母=“android:Theme.Light”被删除,屏幕是黑暗和全屏,所以TestTheme <- AppTheme (fullscreen) <- AppBaseTheme <- Theme (dark)层次结构。

当指定parent="..."时,删除前缀时没有区别。 所以parent="..."似乎是绝对的优先。 AppTheme.TestTheme不会同时从父母那里inheritance。

现在,看一下默认的themes.xml,看起来Theme.Holo.Lightinheritance自Theme.Light,然后所有的Holo东西都是在描述中手动指定的。 所以他们把它命名为Theme.Holo.Light并不是因为它inheritance了Holo,而是因为他们想要一个名字来形容它为“Holo的轻型版本”。 而且因为他们想要让人困惑。

这是在姜饼2.3.3testing。