我一直在想這個,所以我寫了一個簡單的測試應用程序來嘗試它。資源文件是這樣的:
<!--
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不會同時從父母那裏繼承。
現在,看看默認的themes.xml,看起來Theme.Holo.Light繼承自Theme.Light,然後所有Holo的東西都在其描述中手動指定。所以他們把它命名爲Theme.Holo.Light並不是因爲它繼承了Holo,而是因爲他們想要一個名稱來描述它爲'Holo的輕型版本'。並且因爲他們想成爲$ @ &!令人困惑。
這是在薑餅2.3.3測試。
這真的很有幫助。謝謝! –
兩歲,但仍然幫助我。這應該真正進入官方造型文檔的某個地方。 – jenzz
有趣..它不適用於我: Android Studio 2.3.3 構建#AI-162.4069837,構建於2017年6月6日 JRE:1.8.0_112-release-b06 x86_64 JVM:OpenJDK 64位服務器VM by JetBrains sro – Maciej