2013-07-25 12 views
26

我正在嘗試實施新的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) 

的問題發生在在onCreate()super.onCreate(bundle)電話。

這裏是我所有的主題化相關的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> 

回答

53

那麼,如何解決這個問題:

  1. 進口支持庫作爲「sdk/extras/a」的項目ndroid /支持/ V7 /程序兼容性」。
  2. 項目中的引用庫(對於Eclipse,「屬性 - Android - 添加」)。
  3. 構建項目(對於Eclipse,「項目 - 構建全部」)。確保你的主項目gen文件夾中有「android.support.v7.appcompat」。
  4. 如果它不起作用 - 清理並重建項目。
+4

在那裏,完成該操作。它不會工作。 – razielsarafan

+3

你完全確定你的gen文件夾中有「android.support.v7.appcompat.R.java」嗎?沒有它,它不會工作 – BoredT

+1

我完全和絕對相信我在v7 gen文件夾中有R.java。 – razielsarafan

1

我想你應該在清單中將目標版本更改爲18。

android:targetSdkVersion="18" 
+0

已經做到了。沒有運氣。 – razielsarafan

4

除了BoredT的答案,我加入這一行水庫/價值/ styles.xml

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

我也做了以下內容,爲我工作。

  • 從libs文件夾中刪除jar。
  • 在您的eclipse工作區導入sdk \ extras \ android \ support \ v7 \ appcompat \ project。
  • 確保android-support-v4.jar在您的項目中相同。
  • 將appcompat作爲庫添加到項目中。

確保您在YOUT的Manifest.xml您的活動具有正確的主題

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

好運;)

+4

+1提及該活動必須使用「Theme.AppCompat」主題或子類「Theme.AppCompat」的主題 –

1

這是我如何解決這個問題:重建的Adroid支持-V7你的eclipse工作區中的-appcompat庫項目。然後再次構建您自己的項目。

1

如何在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」 它位於:庫/ ActionBarCompat /程序兼容性

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清單添加了必要的主題:

<activity 
android:theme="@style/Theme.AppCompat" 
android:name="es.hol.soundmedia.MainActivity" 

所有這些工作之後。也許更簡單的方法來設置,但對我來說帳戶正在工作。 不幸的是,我無法顯示結果,因爲我被阻止,但我希望說明有所幫助。

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。

2

按照步驟從資源庫添加 - >蝕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"我用它在應用標籤中也可以適用於個人活動

重建所有!

+0

這解決了我的問題。將該行添加到project.properties允許Eclipse生成R.java。 – Leon

0

檢查R.Java for appcompat v7 jar文件存在於您的應用程序的生成文件夾中