Как именно наследование темы работает в 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>

Если я удаляю строку <item name="android:windowNoTitle">true</item>, в моих действиях есть строка заголовка. Однако, если я держу эту строку там, у них нет заголовка (это то, что я хочу).

Мне любопытно, почему parent="@android:style/Theme.NoTitleBar" кажется, не имеет никакого эффекта? Не делает parent то, что я думаю, что он делает? Я думал, что это сработало вот так:

@android:style/Theme.NoTitleBar --> AppBaseTheme --> AppTheme
^                                   ^                ^
|                                   |                |
|                                   |                Has everything AppBaseTheme
|                                   |                does, unless it overridden
|                                   |
|                                   Has everything @android:style/Theme.NoTitleBar
|                                   does, unless it 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>

Однако я также обнаружил, что если я установил <item name="android:windowNoTitle">true</item> в AppBaseTheme, это также не повлияет; Я должен установить его в AppTheme. Тогда какова черта - это указание указать родителя?

Ответ 1

Думаю, я просто понял это. Оказывается, когда я создал проект, Android создал файл res/values-14/styles.xml, а внутри этого было <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">.

Оказывается, что файл res/values-14/styles.xml переопределял мой default res/values/styles.xml, потому что устройство, на котором я тестировалось, имеет уровень API 14, и поэтому он предпочитает файлы в values-14 по умолчанию values.

Наследование действительно работает, как я думал, это так; Я просто не понимал, что вещи переопределяются файлами, созданными при первом создании моего проекта.