26

我正在尝试实现新的 v7 Support Library 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:

样式化的.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>
4

9 回答 9

53

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

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

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

  • 从 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"
         >

祝你好运 ;)

于 2013-07-26T13:24:38.617 回答
4

除了 BoredT 的回答,我将此行添加到 res/values/styles.xml

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
于 2013-07-25T23:14:23.587 回答
2

Follow steps from Adding libraries with resources -> Eclipse http://developer.android.com/tools/support-library/setup.html :

  1. follow all the steps (use copy project in workspace)
  2. add android.library.reference.1=../android-support-v7-appcompat to your project.properties
  3. use android:theme="@style/Theme.AppCompat" I used it in application tag you can apply to individual activities as well

Rebuild all!

于 2014-02-16T08:37:50.530 回答
1

对于那些不喜欢在 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 的情况下成功构建。

于 2013-08-27T05:53:33.540 回答
1

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

于 2013-07-28T18:36:42.740 回答
1

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

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

下图显示了导入项目的结构。将其复制到我的项目的根目录并放置在“库”目录中: https ://dl.dropboxusercontent.com/u/67269258/Tuto/tree.PNG

除了安装上述结构。在“settings.glade”中,我必须添加新项目:

include ':FreeMusic', ':libraries:ActionBarCompat:appcompat'

在 library 项目中,添加了文件 '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"

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

于 2013-08-04T02:11:10.037 回答
1

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

android:targetSdkVersion="18"
于 2013-07-25T09:00:11.883 回答
0

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

于 2015-04-18T02:02:44.197 回答