无法为新的Android ActionBar支持找到Theme.AppCompat.Light

Bra*_*uez 352 android android-theme android-actionbar android-actionbar-compat

我正在尝试实施Google几天前发布的新ActionBar支持库.在过去,我使用Google Developer's Support Library Setup页面上列出的相同方法成功实现了ActionBarSherlock,没有任何问题- 使用有关如何包含资源的指南(类似于ActionBarSherlock的工作方式).我将库项目作为库加载到我自己的项目中.

我可以告诉图书馆加载正常.当,而不是在我的MainActivity.java延伸活动,我改成了扩展ActionBarActivity(根据谷歌的说明),也不会出现错误 - 它正确导入.

我甚至尝试绕过style.xml文件并添加@style/Theme.AppCompat.Light到AndroidManifest.xml中两个直接<application><activity>具有android:theme="@style/ThemeAppCompat.Light"与导致同样的错误都尝试.

现在问题是我无法让它改变主题,更不用说甚至构建而不会抛出错误.下面是我收到的错误,后面是我更改为使用新主题的style.xml文件.

我有使用Android应用程序的适度经验,并且使用最新版本的支持库和使用API​​ 18(Android 4.3)编译的SDK运行Eclipse.

构建期间收到错误

错误:检索项目的父项时出错:找不到与给定名称"@ style/Theme.AppCompat.Light"匹配的资源.styles.xml/ActBarTest/res/values line 3 Android AAPT问题

style.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.ProsoftStudio.ACTest" parent="@style/Theme.AppCompat.Light">
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

有什么建议?这从来都不是ActionBarSherlock的问题.我想继续使用这个新的支持库.几乎看起来.jar正在加载,但不是资源.

小智 386

你需要做下一个:

  1. File->Import (android-sdk\extras\android\support\v7).选择"AppCompat"
  2. Project-> properties->Android. 在"添加"部分库中选择"AppCompat"
  3. 就这些!

注意:如果您在菜单项中使用"android:showAsAction",则需要更改前缀android,如示例http://developer.android.com/guide/topics/ui/actionbar.html

  • 这对我不起作用.我完全按照这里所写的那样做,但最终找到了数百个没有找到名称错误匹配的资源.缺少的资源是API 11及更高版本中包含的样式,但是这个东西应该可以在API 7中使用.是否存在一些我错过的连接!?! (65认同)
  • 如何在IntelliJ IDEA中解决这个问题? (43认同)
  • 在File-Import下我找不到'android-sdk'.我只看到'andoird'.任何人? (9认同)
  • 遇到类似的问题,我的appcompat库中不存在Theme.AppCompat.Light.NoActionBar主题. (5认同)
  • 我该怎么写代替YOUR_APP.showAsAction? (2认同)
  • apocalypz,我认为你错过了资源,因为你导入了没有资源的库.这里是"使用资源添加库"的链接https://developer.android.com/tools/support-library/setup.html#libs-with-res (2认同)

mar*_*110 118

如果像我一样,您正在http://developer.android.com/training/basics/actionbar/setting-up.html上关注Android教程并不断收到此错误,请尝试更改AppBaseTheme所有styles.xml文件中的样式.详细地:

  1. 在文件中res/values/styles.xml更改行:

    <style name="AppBaseTheme" parent="android:Theme.Light">
    
    Run Code Online (Sandbox Code Playgroud)

    至:

    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在文件中res/values-v11/styles.xml更改行:

    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    
    Run Code Online (Sandbox Code Playgroud)

    至:

    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在文件中res/values-v14/styles.xml更改行:

    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    
    Run Code Online (Sandbox Code Playgroud)

    至:

    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    
    Run Code Online (Sandbox Code Playgroud)

现在应用程序运行正常.

  • 是的,这对我有用.需要注意的关键是在父属性"android:"前缀内置主题(样式),而没有此前缀的值引用您自己的样式,或者您链接到的任何库中的样式...例如android-support -V7-程序兼容性. (11认同)
  • 没有什么对我有用......已经浪费了4个小时.我仍然得到没有匹配给定名称的资源(在'theme'处,值为'@ style/Theme.AppCompat.Light').即将放弃. (6认同)
  • 我只是改变了那些方式,事实上,这就是我的项目中的事情. (2认同)

小智 28

我将分享我对这个问题的经验.我因为这个而疯了,但我发现问题是Eclipse本身的一个错误,而不是我的代码: 在eclipse中,无法在另一个android项目中引用一个android库项目

因此,如果您的C:驱动器中有Android支持库,而您的项目位于计算机上的D:驱动器中,则Eclipse将无法正常运行,并且无法知道Android支持库的位置(绿色勾选变为红叉).要解决此问题,您需要将两个项目移动到同一个硬盘驱动器上.

  • 谢谢.这就是我的情况.在步骤1(文件 - >导入(android-sdk\extras\android\support\v7).选择"appcompat"),需要选中"复制到工作区". (4认同)

Dav*_*las 26

如果您修改项目结构模块,这是Android Studio中可能发生的问题.在这种情况下,您可能需要再次添加依赖项.在文本编辑器中编辑"build.gradle"文件以包含所需的依赖项:

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
Run Code Online (Sandbox Code Playgroud)

这应该用lib组件更新你的'{your_project_name} .iml'文件:

<orderEntry type="library" exported="" name="appcompat-v7-19.0.1" level="project" />
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我的问题.将appcompat添加到内部build.gradle的依赖项中.我很遗憾地说我手动编辑以匹配另一个破坏了东西的项目! (2认同)

小智 23

我在Eclipse中使用Android支持库(APL)项目和主项目(MP)执行了以下操作:

  1. 确保APLMP都具有相同minSdkVersiontargetSdkVersion.

  2. 添加了APL作为MP的构建依赖项:

    1. 进入MP的 "属性> Java构建路径" ,然后

    2. 选择"项目"选项卡并添加APL.

  3. MP的属性中,在"Android"下,在库下添加了对APL的引用.

1和2得到了做工精细的Java类的引用......但是我还是看到了在错误manifest.xmlMP尝试引用时@style/Theme.AppCompat.LightAPL.当我执行第3步时,这只会消失.

  • 绝对使用"@ style/Theme.AppCompat ..."而不是"@android:style/Theme.AppCompat ...".这个答案加上#3解决了我的问题. (9认同)

use*_*816 16

它有点晚了,但这是我在AndroidStudio中完成它的方法!

右键单击应用程序以转到属性 右键单击应用程序以转到属性

转到依赖项并单击"+"符号并选择库依赖项 转到依赖项并单击 选择appcompat-v7 选择appcompat-v7


Yul*_*mok 12

IntelliJ IDEA解决方案.

1.运行Android SDK Manager并安装最新的SDKAndroid支持Libarary.SDK和Android支持Libarary的版本应该是一样的!23在我的情况下.另一种变体会给你错误.
在此输入图像描述
2.将您的IDEA项目的SDK版本更改为您在上一步中安装的最后一个版本.(ps.你可能不会使用Maven).
在此输入图像描述

3.将现有资源中的新模块添加到您的IDEA项目中.
在此输入图像描述

4.添加AppCompat项目.!应该是最后一个SDK呢! (ps.在此步骤的任何地方说"是")
在此输入图像描述

5.打开主项目模块的设置,然后添加3个项目:

5.1. 模块依赖.选择android-support-v7-appcompat
在此输入图像描述

5.2.2个.图书馆依赖.添加android-sdk\extras\android\support\v7\appcompat\libs\android-support-v4.jarandroid-support-v4\android-support-v7-appcompat.jar
在此输入图像描述

总的来说将是:
在此输入图像描述

6. 非常重要!!!
添加前缀为@style的主题(不是另一个!).
在此输入图像描述



Android Studio解决方案.

1.运行Android SDK Manager并安装最新的SDKAndroid支持Libarary.SDK和Android支持Libarary的版本应该是一样的!23在我的情况下.另一种变体会给你错误.
在此输入图像描述

2.build.gradle旁边添加

dependencies {
    compile 'com.android.support:appcompat-v7:23.0.1'
} 
Run Code Online (Sandbox Code Playgroud)

PS如果您是Android开发人员的新手,我强烈建议您立即转到Android Studio&Gradle - 您将获得管理Android应用程序的最简单方法.


mum*_*ush 10

适用于Android Studio 1.2.2

parent属性值中删除"android" :

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"></style>
Run Code Online (Sandbox Code Playgroud)


Cro*_*ong 7

你需要参考$ ANDROID_SDK/extras/android/support/v7/appcompat

  • 引用`appcompat`作为Android库,您的主项目资源可以从appcompat找到主题 (3认同)

gen*_*hkg 5

对于IntelliJ IDEA或Android Studio:

将其添加到app.gradle构建文件

dependencies {
    compile "com.android.support:appcompat-v7:21.0.+"
} 
Run Code Online (Sandbox Code Playgroud)

-v:xx.0+用你的构建目标替换 ,如果你有19个平台那么它必须像:

dependencies {
    compile "com.android.support:appcompat-v7:19.0.+"
}
Run Code Online (Sandbox Code Playgroud)