我是否也需要为 V21 样式使用 Theme.AppCompat 主题(或后代)?

Do I need to use a Theme.AppCompat theme (or descendant) for V21 styles too?

在使用 Material Design 主题时,我的 values-v21 文件夹是否应该包含对 Theme.Appcompat 的引用? 我的 API 最小值是 9,我的目标 API 是 21.

我有以下内容: AndroidManifest.xml

   <application
    ...
    android:theme="@style/AppTheme">

values\styles.xml

<resources>
    <style name="AppBaseTheme" parent="Theme.AppCompat.NoActionBar">    
    </style>
    <style name="AppTheme" parent="AppBaseTheme">
    </style>
</resources>

values-v21\styles.xml

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Material.Light">
    </style>
</resources>

但是我明白了

 ...You need to use a Theme.AppCompat theme (or descendant) with this activity.

并且我已经将 Activity 扩展为 ActionBarActivity

我主要关注了下面的视频http://youtu.be/h57QpXp2TRg

您可以使用此代码区分 API 个版本

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
    // Do something for Lollipop and above versions
} else{
    // do something for phones running an SDK before Lollipop
}

如果您在没有 Appcompat 的情况下为 API 21 创建单独的布局,您将不需要参考。

否则您仍将使用需要使用 Theme.Appcompat

的 Appcompat

它在我观看的视频中起作用,因为讲师使用的不是棒棒糖模拟器,而是较低版本。该系列的下一个视频解释了这个问题。 http://youtu.be/hrlGVU8z7zc

正确的定义应该是:

values-v21\styles.xml

<resources>
    <style name="AppTheme" parent="AppBaseTheme">
    </style>
</resources>

values\styles.xml

<resources>
    <style name="AppBaseTheme" parent="Theme.AppCompat">    
    </style>
    <style name="AppTheme" parent="AppBaseTheme">
    </style>
</resources>