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

42
我想在最低SDK版本为8的应用程序中使用Material主题。根据文档 - "Material主题仅在Android 5.0(API级别21)及以上版本中提供。 v7支持库为某些小部件提供具有材料设计风格的主题,并支持自定义调色板。"这是否意味着如果我在项目中添加v7 Support Library,就可以使用它?因为在添加此库后,我遇到了以下错误:

  

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

或者我可能理解错了?欢迎任何建议。先谢谢了。

1
在那个页面上,他们说要查看这个页面,它会告诉你可以使用哪些Theme.AppCompat。 - user1932079
yaa支持库支持版本8,但您必须使用21进行编译。 - Suhail Mehta
@JeremyMiller 谢谢你的链接,我错过了它。 - PPD
4个回答

43

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

一个是默认存在的,另一个则需要在res文件夹中创建,并将其命名为values-v21。

在默认的values文件夹中的styles.xml文件中,使用不同于Material主题的主题。 而在您创建的values-v21文件夹中的styles.xml文件中,则使用Material主题。

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

如果不支持(在运行旧版Android的手机上),则将使用默认的values文件夹。


是否也需要制作一个完全相同的 Strings.xml 文件?这似乎有些多余? - Koen Demonie

34

要获得 Material Design 的效果,您需要使用 android:theme="@style/Theme.AppCompat.Light" 主题。

请确保您的最小 SDK 版本为 8,目标 SDK 版本为 21,并且您正在使用构建工具/SDK 版本 21。


我认为我更喜欢这个答案而不是被接受的那个。 - Rishabh

25

Pedro Oliveira is right关于Theme.AppCompat的问题,但该回答中缺少一些重要信息。

由Android团队的Chris Banes撰写的博客文章appcompat v21: material design for pre-Lollipop devices!或许最能回答如何在API 21之前的版本中获得Material主题的问题。

总结一下,您需要appcompat-v7 依赖项

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

接下来,如果您要使用深色主题作为基础主题,请使用:

```css /* Dark Theme */ :root { --text-color: #f2f2f2; --bg-color: #222; } ```
<style name="AppTheme" parent="Theme.AppCompat">
</style>

同时提供轻量版:

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

如果您是AppCompat的新手,那么有些事情您需要知道,例如:

您的所有活动都必须从ActionBarActivity*继承。它继承了来自v4支持库的FragmentActivity,因此您可以继续使用片段。

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

但您真的应该阅读该博客文章的整个设置部分!(工具栏与操作栏的信息以及某些评论也是您可能不想错过的内容。)


谢谢你的补充 :) - Pedro Oliveira
使用Theme.AppCompat.Light.NoActionBar并继承自android.support.v4.app.FragmentActivity,它可以正常工作。我认为一旦添加了ActionBar,就需要从ActionBarActivity进行扩展。 - Evan Leis
是的,我引用的措辞并不是很清晰。如果您不使用Action Bar(或将Toolbar作为Action Bar),则不需要使用ActionBarActivity。 - Jonik
很好的总结。谢谢! - Someone Somewhere

2
在你的NameActivity.java文件中导入以下内容:
import android.support.v7.widget.Toolbar;

评论上一个:

//import android.widget.Toolbar;

有了这个,问题就解决了。


2
我认为这不是这里问题的答案。 - laalto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接