【问题标题】:Error implementing Support Library Action Bar实施支持库操作栏时出错
【发布时间】:2013-07-25 07:34:17
【问题描述】:

我正在尝试实现新的 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) 呼叫onCreate()

这是我所有与主题相关的 XML:

styled.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>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cidaut.termoweb"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Termoweb" >
        <activity
            android:name="com.cidaut.termoweb.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

【问题讨论】:

    标签: android android-actionbar android-support-library


    【解决方案1】:

    那么,我是如何解决这个问题的:

    1. 将支持库作为项目从“sdk/extras/android/support/v7/appcompat”导入。
    2. 项目中的参考库(对于 Eclipse,“属性 - Android - 添加”)。
    3. 构建项目(对于 Eclipse,“项目 - 构建所有”)。确保您的主项目 gen 文件夹中有“android.support.v7.appcompat”。
    4. 如果它不起作用 - 清理并重建项目。

    【讨论】:

    • 您确定您的 gen 文件夹中有“android.support.v7.appcompat.R.java”吗?没有它就行不通
    • 我完全确定我在 v7 gen 文件夹中有 R.java。
    • 我引用了@style/Widget.AppCompat.Spinner,由于某种原因它不存在。我只是删除了对这种风格的所有引用,一切都像魅力一样。
    • 谢谢。 “Build ALL”......我怎么能错过它,但我有。
    • 是的,您的gen文件夹中必须有android.support.v7.appcompat包。
    【解决方案2】:

    我已经完成了以下工作并为我工作。

    • 从 libs 文件夹中删除 jar。
    • 在 Eclipse 工作区中导入 sdk\extras\android\support\v7\appcompat\ 项目。
    • 确保项目中的 android-support-v4.jar 相同。
    • 将 appcompat 作为库添加到您的项目中。

    确保您在 Manifest.xml 中的活动具有正确的主题

        <activity
            android:name="***.*****.******"
            android:label="@string/app_name"
            android:theme="@style/Theme.AppCompat.Light"
             >
    

    祝你好运;)

    【讨论】:

    • +1 表示活动必须使用“Theme.AppCompat”主题或子类“Theme.AppCompat”的主题
    【解决方案3】:

    除了 BoredT 的回答,我在 res/values/styles.xml 中添加了这一行

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

    【讨论】:

      【解决方案4】:

      按照添加资源库中的步骤 -> Eclipse http://developer.android.com/tools/support-library/setup.html

      1. 按照所有步骤操作(在工作区中使用复制项目)
      2. android.library.reference.1=../android-support-v7-appcompat 添加到您的project.properties
      3. 使用android:theme="@style/Theme.AppCompat"我在应用程序标签中使用了它,您也可以将其应用于单个活动

      全部重建!

      【讨论】:

      • 这解决了我的问题。将这一行添加到 project.properties 允许 Eclipse 生成 R.java。
      【解决方案5】:

      我认为您应该在清单中将目标版本更改为 18。

      android:targetSdkVersion="18"
      

      【讨论】:

        【解决方案6】:

        这就是我解决问题的方法:在您的 Eclipse 工作区中重建 adroid-support-v7-appcompat 库项目。然后再次构建自己的项目。

        【讨论】:

          【解决方案7】:

          如何在 android studio 中将项目作为库导入?按照提示博客作为参考: http://showlabor.blogspot.com.br/2013/05/actionbarsherlock-in-android-studio-01.html

          下一个问题,也帮了大忙: Error implementing Support Library Action Bar

          下图显示了导入项目的结构。将其复制到我的项目的根目录并放置在目录“库”中: 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"
          

          完成所有这些工作。也许是一种更简单的设置方法,但对我来说,该帐户正在运行。 不幸的是我无法显示结果,因为我被阻止了,但我希望说明有所帮助。

          【讨论】:

            【解决方案8】:

            对于那些不喜欢在 Eclipse 中手动操作以便从结帐进行构建的用户,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
            

            请注意,在子目录也 [手动!] 作为项目添加到 Eclipse 的工作区之前,Eclipse 仍会显示各种警告。但是 ant 构建将在不使用 Eclipse 的情况下成功构建。

            【讨论】:

              【解决方案9】:

              检查 R.java 的 appcompat v7 jar 是否存在于您生成的应用程序文件夹中

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多