主题继承在Android中的运作方式究竟如何?

Cor*_*lks 10 android

我有以下主题res/values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="AppBaseTheme" parent="@android:style/Theme.NoTitleBar">
    </style>

    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

如果我删除该<item name="android:windowNoTitle">true</item>行,我的活动就会有标题栏.但是,如果我在那里保留那条线,那么它们就没有标题栏(这就是我想要的).

我很好奇为什么parent="@android:style/Theme.NoTitleBar"似乎没有效果?并parent没有做什么,我认为它呢?我认为它的工作原理如下:

@android:style/Theme.NoTitleBar --> AppBaseTheme --> AppTheme
^                                   ^                ^
|                                   |                |
|                                   |                Has everything AppBaseTheme
|                                   |                does, unless it's overridden
|                                   |
|                                   Has everything @android:style/Theme.NoTitleBar
|                                   does, unless it's overridden (which I'm not
|                                   doing)
|
Sets whatever it needs to to not have a title, which I assume
is done by setting <item name="android:windowNoTitle">true</item>
Run Code Online (Sandbox Code Playgroud)

不过,我也发现,假如我<item name="android:windowNoTitle">true</item>AppBaseTheme这也没有影响; 我必须把它设置好AppTheme.那么指定父母的重点是什么呢?

Cor*_*lks 9

我想我只想出来了.事实证明,当我创建项目时,Android创建了一个res/values-14/styles.xml文件,其内部就是<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">.

事实证明该res/values-14/styles.xml文件覆盖了我的默认值,res/values/styles.xml因为我正在测试的设备具有API级别14,因此它首选的文件values-14比默认文件更好values.

继承确实像我认为的那样起作用; 我只是没有意识到在我第一次创建项目时创建的文件被覆盖了.