error:No resource found that matches the given name 'Theme.AppCompat.Light'

时间:2022-01-24 23:34:11

一、stsckoverflow

http://*.com/questions/17870881/cant-find-theme-appcompat-light-for-new-android-actionbar-support

Solution 1:

AppCompat is a library project. You need to reference the library project in your android project.

Check the topic Adding libraries with resources.

1. File->Import (android-sdk\extras\android\support\v7). Choose "appcompat"

2. Project-> properties->Android. In the section library "Add" and choose "appCompat"

3. That is all!

二、developer .android .com csdn 翻译

1. https://developer.android.com/tools/support-library/index.html

2. http://blog.csdn.net/crazybigfish/article/details/18363351

Solution 2:

详细分析,了解深层原因

主要原因是因为没有添加Android Support Library?。

1.1. 什么是Android Support Library,拿来有什么用?

是一系列的代码库,为了向后兼容一些低版本的Android API。这个是为了让你的代码能够运行在更多机器上,因为有些高版本API的特性在低版本上是无法使用的。

在Android Support Library包中,包含了几个可以被引入到你应用的库。每一个库支持一个特定的Android平台版本范围和功能集合。

这个指南解释了Support Library提供的重要功能和版本,这将帮助你决定你的应用选择哪一个功能和版本。总的来说,我们推荐引入v4 supportv7 appcompat的库,因为它们支持的Android版本很广泛,并为推荐的用户界面样式提供API。想要使用任何下面的库,你必须将库文件下载到你安装的Android SDK中。在Support Library Setup中根据指引下载Support Library,来完成这一步骤。你必须采取额外的措施来引入一个特殊的Support Library到你的应用中。查看下面每一个库章节的末尾来获取重要信息,这些信息阐述了如何将库引入你的应用中。

v4 Support Library
    这个库是为Android 1.6(API level 4)和更高版本设计的。相对于其他库,他包含的API集合最大,包括对应用组件、用户界面功能、辅助功能、数据处理、网络连接和编程工具的支持。还有很多其他API包含在这个库中。在API引用中查看 android.support.v4包,以获取关于v4 Support Library API的全部和详细的信息。

这个库放在<sdk>/extras/android/support/v4/目录下。这个库不包含用户界面资源。按照adding libraries without resources的说明来将这个库引入你的应用项目。

v7 Libraries
   有几个库是为Android 2.1(API level 7)和更高版本设计的。这些库提供指定的功能集合,并且可以相互独立地引入你的应用。

v7 appcompat library

这个库添加了对Action Bar用户界面 design pattern(设计样式)的支持。注意:这个库依赖于v4 Support Library。如果你在使用Ant或者Eclipse,确保要将v4 Support Library作为这个库classpath的一部分引入。在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v7/appcompat/ 目录下。这个库包含用户界面资源。按照 adding libraries with resources 的说明来将这个库引入你的应用项目。

v7 gridlayout library

这个库添加了对 GridLayout类的支持,这个类允许你使用矩形单元的网格来排列用户界面元素。在API引用中查看android.support.v7.widget 包,以获取关于v7 gridlayout Support Library API的详细信息。在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v7/gridlayout/ 目录下。这个库包含用户界面资源。按照adding libraries with resources 的说明来将这个库引入你的应用项目。

v7 mediarouter library

这个库提供了MediaRouter, MediaRouteProvider和相关的支持Google Cast developer preview(谷歌投影)开发者预览的媒体类。总的来说,在v7 mediarouter库中的API提供了一种控制手段,它可以控制从当前设备到扩展屏幕、扬声器和其他目的设备的媒体通道和数据流的路径选择。这个库包含了一些API,这些API包含发行具有应用特性的媒体路径provider,发现和选择目的设备,检查媒体状态和其他一些功能。在API引用中查看 android.support.v7.media 包,以获取关于v7 mediarouter Support Library API的详细信息。

在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v7/mediarouter/ 目录下。这个库包含用户界面资源。它是以一个从属于v7 appcompat库的库项目的方式提供给开发者使用的,所以当你在创建项目的时候,你需要在build path中同时引入这两个库。按照 adding libraries with resources 的说明以获取更多如何创建项目的信息。 如果你使用Eclipse/ADT开发,要确保同时引入android-support-v7-mediarouter.jar和android-support-v7-appcompat.jar文件。

v8 Support Library

这个库是为Android(API level 8)或更高版本的使用设计的。它加入了对 RenderScript 计算架构的支持。这些API包含在 android.support.v8.renderscript包中。你应该能意识到介绍包含这些API的应用程序的步骤与其他支持库的API有很大不同。查看 RenderScript开发者指南,以获取更多关于这些API的信息。

v13 Support Library

这个库是为Android 3.2(API level 13)或更高版本的使用设计的。它添加了对 Fragment用户界面样式(利用FragmentCompat类)和额外的fragment支持类的支持。查看 Fragment开发者指南查阅更多关于fragment的信息。在API引用中查看android.support.v13包,以获取关于v13 Support Library API的详细信息。在你下载了Android Support Library以后,这个库放在 <sdk>/extras/android/support/v13/  目录下。这个库不包含用户界面资源。按照 adding libraries without resources的说明来将这个库引入你的应用项目。

1.2  如何添加?

android-support-v7-appcompat的使用

1、下载最新的SDK,然后找到里面的sdk\extras\android\support\v7\appcompat导入到eclipse里面。

2、右键里的项目 - Properties - Android - Add - 选择导入的appcompat项目,这样就可以使自己的项目引用appcompat项目。

3、导入之后如果在控制台提示有两个android-support-v4.jar,原因是自己项目中的android-support-v4.jar和导入的appcompat项目的android-support-v4.jar重复了,删掉自己项目中的android-support-v4.jar就OK了。

下载Support Library

Android Support Library包是作为Android SDK的补充下载提供的,并且在AndroidSDK Manager中是可用的。遵循以下说明来获取Support Library文件。

通过SDK Manager获取Support Library:

1.打开Android SDK Manager

2.在SDK Manager窗口,滚动到Package List的末尾,找到Extra文件夹,如果需要的话打开文件夹显示它的内容。

3.选择Android Support Library项目。

注意:如果你使用的是Android Studio开发,选择并安装Android Support Repository项目而不是Android Support Library项目。

4.点击Install packages按钮。

下载完成后,SDK会将Support Library文件安装到你已经存在的Android SDK目录下。库文件位于SDK的如下子目录:<sdk>/extras/android/support/目录。

选择Support Library

在添加一个Support Library到你的项目之前,想好你要包含哪些功能,以及你要支持的最低Android版本是多少。查看Support Library Features以获取更多关于不同库提供的功能的信息。

添加Support Library

为了使用Support Library,你必须在开发环境中修改应用项目的classpath依赖关系。并且你必须为将要使用的每一个Support Library都执行一下上述步骤。

除了可编译的代码类,一些Support Library包含了资源,比如图片或XML文件。例如,v7 appcompatv7 gridlayout库包含一些资源。

如果你不确定一个库是否包含资源,查看Support Library Features页面。下面的章节描述了如何添加一个包含或不包含资源的Support Library到你的应用项目中。

添加不带资源的library

添加一个不包含资源的Support Library到你的应用项目:利用Eclipse

1. 确保你已经利用SDK Manager下载了Android Support Library 。

2. 在你的项目的根目录下创建一个libs/目录。

3. 从你的Android SDK安装目录(例如,<sdk>/extras/android/support/v4/android-support-v4.jar)下拷贝JAR文件到你项目的libs/目录下。

4. 右键点击JAR文件并选择Build Path > Add to Build Path。

利用Android Studio

1. 确保你已经利用SDK Manager下载了Android Support Repository 。

2. 打开项目中的 build.gradle文件。

3. 添加Support Library到dependencies部分。例如,如果添加v4 Support Library,加入下面一行:

添加带资源的library

添加一个包含资源(例如带有Action Bar的v7 appcompat)的Support Library到你的应用项目:

创建一个基于support library代码的 library project

1. 确保你已经利用 SDK Manager下载了Android Support Library

2. 创建一个library项目并且确保需要的JAR文件包含在了项目的build path中:

1. 选择File > Import

2. 选择Existing Android Code Into Workspace 并点击Next

3. 浏览SDK安装目录,并进入Support Library目录下。例如,如果你要添加appcompat项目,浏览 <sdk>/extras/android/support/v7/appcompat/。

4. 点击Finish引入项目。对于v7 appcompat项目,你将看到一个标题为android-support-v7-appcompat的新项目。

5. 在新项目中,展开libs/ 文件夹,右键点击每一个.jar文件,并选择Build Path > Add to Build Path。例如,当创建v7 appcompat项目时,同时将android-support-v4.jar和android-support-v7-appcompat.jar文件添加到build path中。

6. 右键点击library项目文件夹并选择Build Path > Configure Build Path

7. 在Order and Export选项中,在刚刚添加到build path中的.jar文件上打勾,这时这些文件成为项目可用的了并依赖于这个library项目。例如,appcompat项目要求同时导出android-support-v4.jar和android-support-v7-appcompat.jar文件。

8. 去掉Android Dependencies上的对勾。

9. 点击OK完成设置。

现在你拥有了一个包含你选择的Support Library的library项目,你可以在一个或多个应用项目中利用这个Support Library。

向你的应用工程(译者注:需要加入Support Library的工程)添加库:

1. 在项目浏览器中右键单击你的项目,选择Properties

2. 在左边的分类面板中,选择Android

3. 在Library面板中,点击Add

4. 选择库项目,然后点击OK。例如,appcompat项目会在列表中显示为android-support-v7-appcompat

5. 在properties窗口中,点击OK

利用Android Studio

1. 确保你利用SDK Manager下载了Android Support Repository

2. 打开项目中的build.gradle文件。

3. 将support library功能项目标识符添加到dependencies部分。例如,为了包含appcompat项目,需要将compile "com.android.support:appcompat-v7:18.0.+"添加到dependencies部分。如下:

使用Support Library的API

对目前framework API提供支持的Support Library类,一般都与framework中的类名相同,但是位于android.support类包中,或者有一个*Compat后缀。

警告:当使用Support Library中的类的时候,确定你从适当的包中引入这些类。例如,当应用ActionBar类的时候:

· 当使用Support Library时:android.support.v7.app.ActionBar

· 当只为API 11或更高级别开发的时候:android.app.ActionBar

注意:当包含了Support Library在你的项目中后,我们强烈推荐你使用ProGuard工具准备你的应用APK发布。除了保护你的源代码外,ProGuard工具还可以从你包含到应用中的任何库中去除无用的类,这样可以使你的应用大小在下载的时候尽可能的小。要获取更多信息,请查看 ProGuard

在Android开发者training classesguides和示例中,提供了一些使用Support Library功能的更多指南。查看API参考中的android.support包,以获取更多关于单个Support Library类和方法的信息。

Manifest声明的改变

如果你正在利用Support Library增加目前应用的向下兼容性到一个Android API的早期版本,确保更新你应用的manifest。特别的,你要更新manifest中<uses-sdk>标签的android:minSdkVersion元素,改成一个新的,更低的版本号,如下:

<uses-sdk

android:minSdkVersion="7"

android:targetSdkVersion="17" />

这个改变通知Google Play你的应用可以被安装在Android 2.1(API level 7)或更高的版本的设备中。

注意:如果你在项目中包含了v4 support和v7 appcompat库,你需要指定最小SDK版本为7(而不是4)。你引入到应用的*别的support library决定了它可以操作的最低的API版本。(译者注:这句话是指当你同时引入了多个包的情况,比如,v7比v4版本更高,所以可以操作的最小SDK版本是7)

代码示例

每一个Support Library都包含了代码示例来帮助你开始使用support API。代码示例包含在从SDK Manager的下载中,并被放在了Android SDK安装目录中,如下所列:

· 4v Samples: <sdk>/extras/android/support/samples/Support4Demos/

· 7v Samples: <sdk>/extras/android/support/samples/Support7Demos/

· 13v Samples: <sdk>/extras/android/support/samples/Support13Demos/

· App Navigation: <sdk>/extras/android/support/samples/SupportAppNavigation/