android:Theme.Material.Light 需要 API 级别 21(当前最低为 8)

Posted

技术标签:

【中文标题】android:Theme.Material.Light 需要 API 级别 21(当前最低为 8)【英文标题】:android:Theme.Material.Light requires API level 21 (current min is 8) 【发布时间】:2015-01-15 09:18:35 【问题描述】:

我想在我的应用程序中使用材料主题,其最低 sdk 版本为 8。根据文档-“材料主题仅在 android 5.0(API 级别 21)及更高版本中可用。v7 支持库为主题提供材料一些小部件的设计风格并支持自定义调色板。”如果我在项目中添加 v7 Support Libarary 是否意味着我可以使用它?因为添加这个库后我得到了以下错误:

或者我理解错了什么?任何建议将不胜感激。提前致谢。

【问题讨论】:

在那个页面上,他们说要查看this page,它会告诉您可以使用哪个 Theme.AppCompat。 yaa support lib 支持版本 8 但你必须用 21 编译 @JeremyMiller 感谢您提供的链接,我错过了。 【参考方案1】:

为此,您需要有 2 个值文件夹。

一个默认存在,另一个,您必须在 res 文件夹中创建并将其命名为 values-v21。

在默认值文件夹的styles.xml 中,使用Material 主题以外的主题。 在您创建的 values-v21 文件夹的 styles.xml 中,使用 Material 主题。

Android 手机会自动拾取它支持的styles.xml。如果手机支持 Material Design(Lollipop 设备),您的应用将使用 Material 主题(values-21 文件夹)。

如果不是(在运行旧 Android 版本的手机中),将使用默认值文件夹。

【讨论】:

还必须制作一个相同的 Strings.xml 吗?似乎有点多余?【参考方案2】:

您需要使用android:theme="@style/Theme.AppCompat.Light" 主题来获取材料设计。

确保您的最小值为 8,目标为 21。并且您使用的是 build tools/sdk 21。

【讨论】:

我想我更喜欢这个答案而不是接受的答案。【参考方案3】:

Pedro Oliveira is right 与 Theme.AppCompat 相关,但该答案中缺少一些基本信息。

Android 团队的 Chris Banes 的一篇题为 appcompat v21: material design for pre-Lollipop devices! 的博文可能最好地回答了如何为 21 之前的 API 级别获取 Material Theme 的问题。

总结一下,你需要appcompat-v7 dependency:

dependencies 
    ...
    compile "com.android.support:appcompat-v7:21.0.3"

之后,对于深色版本作为您的基本主题,请使用:

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

对于轻量版:

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

如果您是 AppCompat 的新手,您需要了解一些事情,例如:

您的所有活动都必须扩展自 ActionBarActivity*。它延伸 来自 v4 支持库中的 FragmentActivity,因此您可以继续 使用片段。

*注意:最近,ActionBarActivity 已被弃用,取而代之的是 AppCompatActivity。

但是您真的应该阅读该博客文章的整个设置部分! (Toolbar vs Action Bar的信息,some of the comments也是你不可错过的。)

【讨论】:

感谢您补充:) 使用 Theme.AppCompat.Light.NoActionBar 并从 android.support.v4.app.FragmentActivity 扩展,它工作正常。我认为一旦添加了 ActionBar,从 ActionBarActivity 扩展的要求就会发挥作用。 是的,我引用的那个措辞不是最清楚的。如果不使用 Action Bar(或者 Toolbar 作为 Action Bar?),则不需要 ActionBarActivity。 不错的总结。谢谢!【参考方案4】:

在您的 NameActivity.java 文件中导入以下内容:

import android.support.v7.widget.Toolbar;

评论上一条:

//import android.widget.Toolbar;

这样问题就解决了。

【讨论】:

我不认为这是对这里问题的回答。

以上是关于android:Theme.Material.Light 需要 API 级别 21(当前最低为 8)的主要内容,如果未能解决你的问题,请参考以下文章