我正在尝试实施新的v7支持库ActionBar
。但是,我无法让它正常运行。
这是例外
07-25 09:30:01.704: E/AndroidRuntime(9175): FATAL EXCEPTION: main
07-25 09:30:01.704: E/AndroidRuntime(9175): java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$styleable
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:98)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:58)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
07-25 09:30:01.704: E/AndroidRuntime(9175): at com.cidaut.termoweb.MainActivity.onCreate(MainActivity.java:23)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.app.Activity.performCreate(Activity.java:5133)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.os.Handler.dispatchMessage(Handler.java:99)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.os.Looper.loop(Looper.java:137)
07-25 09:30:01.704: E/AndroidRuntime(9175): at android.app.ActivityThread.main(ActivityThread.java:5103)
07-25 09:30:01.704: E/AndroidRuntime(9175): at java.lang.reflect.Method.invokeNative(Native Method)
07-25 09:30:01.704: E/AndroidRuntime(9175): at java.lang.reflect.Method.invoke(Method.java:525)
07-25 09:30:01.704: E/AndroidRuntime(9175): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-25 09:30:01.704: E/AndroidRuntime(9175): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-25 09:30:01.704: E/AndroidRuntime(9175): at dalvik.system.NativeStart.main(Native Method)
问题发生在super.onCreate(bundle)
的{{1}}来电。
这是我所有与主题相关的XML:
styled.xml
onCreate()
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Termoweb" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="actionBarItemBackground">@drawable/selectable_background_termoweb</item>
<item name="popupMenuStyle">@style/PopupMenu.Termoweb</item>
<item name="dropDownListViewStyle">@style/DropDownListView.Termoweb</item>
<item name="actionBarTabStyle">@style/ActionBarTabStyle.Termoweb</item>
<item name="actionDropDownStyle">@style/DropDownNav.Termoweb</item>
<item name="actionBarStyle">@style/ActionBar.Solid.Termoweb</item>
<item name="actionModeBackground">@drawable/cab_background_top_termoweb</item>
<item name="actionModeSplitBackground">@drawable/cab_background_bottom_termoweb</item>
<item name="actionModeCloseButtonStyle">@style/ActionButton.CloseMode.Termoweb</item>
<!-- Light.DarkActionBar specific -->
<item name="actionBarWidgetTheme">@style/Theme.Termoweb.Widget</item>
</style>
<style name="ActionBar.Solid.Termoweb" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="background">@drawable/ab_solid_termoweb</item>
<item name="backgroundStacked">@drawable/ab_stacked_solid_termoweb</item>
<item name="backgroundSplit">@drawable/ab_bottom_solid_termoweb</item>
<item name="progressBarStyle">@style/ProgressBar.Termoweb</item>
</style>
<style name="ActionBar.Transparent.Termoweb" parent="@style/Widget.AppCompat.ActionBar">
<item name="background">@drawable/ab_transparent_termoweb</item>
<item name="progressBarStyle">@style/ProgressBar.Termoweb</item>
</style>
<style name="PopupMenu.Termoweb" parent="@style/Widget.AppCompat.ListView.Menu">
<item name="popupBackground">@drawable/menu_dropdown_panel_termoweb</item>
</style>
<style name="DropDownListView.Termoweb" parent="@style/Widget.AppCompat.ListView.DropDown">
<item name="listSelector">@drawable/selectable_background_termoweb</item>
</style>
<style name="ActionBarTabStyle.Termoweb" parent="@style/Widget.AppCompat.ActionBar.TabView">
<item name="background">@drawable/tab_indicator_ab_termoweb</item>
</style>
<style name="DropDownNav.Termoweb" parent="@style/Widget.AppCompat.Spinner">
<item name="background">@drawable/spinner_background_ab_termoweb</item>
<item name="popupBackground">@drawable/menu_dropdown_panel_termoweb</item>
<item name="dropDownSelector">@drawable/selectable_background_termoweb</item>
</style>
<style name="ProgressBar.Termoweb" parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
<item name="progressDrawable">@drawable/progress_horizontal_termoweb</item>
</style>
<style name="ActionButton.CloseMode.Termoweb" parent="@style/Widget.AppCompat.ActionButton.CloseMode">
<item name="background">@drawable/btn_cab_done_termoweb</item>
</style>
<!-- this style is only referenced in a Light.DarkActionBar based theme -->
<style name="Theme.Termoweb.Widget" parent="@style/Theme.AppCompat">
<item name="popupMenuStyle">@style/PopupMenu.Termoweb</item>
<item name="dropDownListViewStyle">@style/DropDownListView.Termoweb</item>
</style>
</resources>
答案 0 :(得分:53)
所以,我是如何解决这个问题的:
答案 1 :(得分:14)
我做了以下工作并为我工作。
确保您在Manifest.xml中的活动具有正确的主题
<activity
android:name="***.*****.******"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light"
>
祝你好运;)
答案 2 :(得分:4)
除了BoredT的回答,我还将此行添加到res / values / styles.xml
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
答案 3 :(得分:2)
按照使用资源添加库中的步骤 - &gt; Eclipse http://developer.android.com/tools/support-library/setup.html:
android.library.reference.1=../android-support-v7-appcompat
添加到project.properties android:theme="@style/Theme.AppCompat"
我在应用标签中使用它,您也可以应用于个人活动全部重建!
答案 4 :(得分:1)
我认为您应该在清单中将目标版本更改为18。
android:targetSdkVersion="18"
答案 5 :(得分:1)
这就是我解决问题的方法:在eclipse工作区中重建android-support-v7-appcompat库项目。然后再次构建自己的项目。
答案 6 :(得分:1)
如何在android studio中将项目导入为库?按照提示博客作为参考: http://showlabor.blogspot.com.br/2013/05/actionbarsherlock-in-android-studio-01.html
下一个问题也有很多帮助: Error implementing Support Library Action Bar
下图显示了导入项目的结构。这被复制到我的项目的根目录并放在目录'libraries'中: https://dl.dropboxusercontent.com/u/67269258/Tuto/tree.PNG
除了安装上述结构外。在'settings.glade'中,我不得不添加新项目:
include ':FreeMusic', ':libraries:ActionBarCompat:appcompat'
在库项目中,添加了文件'build.gradle' 它位于:libraries / ActionBarCompat / appcompat
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android-library'
dependencies {
compile files(
'libs/android-support-v4.jar',
'libs/android-support-v7-appcompat.jar'
)
}
android {
compileSdkVersion 18
buildToolsVersion "18.0.1"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
}
}
在我项目的'build.gradle'(内部项目)中。
dependencies {
compile project(':libraries:ActionBarCompat:appcompat')
}
在android manifest中添加了必要的主题:
<activity
android:theme="@style/Theme.AppCompat"
android:name="es.hol.soundmedia.MainActivity"
毕竟这项工作。也许更简单的方法来设置它,但对我来说,帐户正在运作。 不幸的是我无法显示结果,因为我被阻止了,但我希望说明有所帮助。
答案 7 :(得分:1)
对于那些不喜欢在Eclipse中需要手动用户工作以便从checkout进行构建的人来说,Eclipse所做的神奇变化是向project.properties添加一行,如:
android.library.reference.1=../android-support-v7-appcompat
这足以从ant构建您的应用程序。您可以自己在源代码中执行此操作,也可以通过Eclipse用户界面执行此操作 - 无论是哪种方式,您都可以将其签入到版本控制系统,并通过新的源代码检查成功构建,无需手动步骤。
但是,如果更适合,您可以将路径设置为您自己项目的子目录,例如
android.library.reference.1=android-support-v7-appcompat
......和......
cp -r $SDK/extras/android/support/v7/appcompat android-support-v7-appcompat
请注意,在将子目录[hand!]作为项目添加到Eclipse的工作区之前,Eclipse仍将显示各种警告。但是,无需使用Eclipse即可成功构建ant构建。
答案 8 :(得分:0)
检查R.java的appcompat v7 jar是否存在于您生成的应用程序文件夹中