Ich versuche die neue v7 Support Library ActionBar
zu implementieren. Ich kann es jedoch nicht zum Laufen bringen.
Hier ist die Ausnahme
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)
Das Problem tritt beim super.onCreate(bundle)
-Aufruf bei onCreate()
auf.
Hier ist meine gesamte themenbezogene 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>
Also, wie ich dieses Problem gelöst habe:
Ich habe folgendes gemacht und für mich gearbeitet.
Stellen Sie sicher, dass Ihre Aktivität in Ihrer Manifest.xml das richtige Thema hat
<activity
Android:name="***.*****.******"
Android:label="@string/app_name"
Android:theme="@style/Theme.AppCompat.Light"
>
Viel Glück ;)
Zusätzlich zur Antwort von BoredT habe ich diese Zeile zu res/values / styles.xml hinzugefügt
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
Befolgen Sie die Schritte unter Hinzufügen von Bibliotheken mit Ressourcen -> Eclipse http://developer.Android.com/tools/support-library/setup.html :
Android.library.reference.1=../Android-support-v7-appcompat
zu Ihren project.propertiesAndroid:theme="@style/Theme.AppCompat"
Ich habe es in Application Tag verwendet, das Sie auch auf einzelne Aktivitäten anwenden könnenBaue alles wieder auf!
Ich denke, Sie sollten Ihre Zielversion im Manifest auf 18 ändern.
Android:targetSdkVersion="18"
So importieren Sie ein Projekt als Bibliothek in Android= studio? Befolgen Sie die Blog-Tipps als Referenz: http://showlabor.blogspot.com.br/2013/05/actionbarsherlock -in-Android-studio-01.html
Die nächste Frage hat auch sehr geholfen: Fehler beim Implementieren der Support Library-Aktionsleiste
Das folgende Bild zeigt die Struktur des importierten Projekts. Das wird in das Stammverzeichnis meines Projekts kopiert und in das Verzeichnis 'libraries' gestellt: https://dl.dropboxusercontent.com/u/67269258/Tuto/tree.PNG
Zusätzlich zur Montage der obigen Struktur. In 'settings.glade' musste ich das neue Projekt hinzufügen:
include ':FreeMusic', ':libraries:ActionBarCompat:appcompat'
Fügen Sie im Bibliotheksprojekt die Datei 'build.gradle' hinzu. Sie befindet sich in: 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')
}
}
In 'build.gradle' (internes Projekt) meines Projekts.
dependencies {
compile project(':libraries:ActionBarCompat:appcompat')
}
In Android Manifest hinzugefügt das notwendige Thema:
<activity
Android:theme="@style/Theme.AppCompat"
Android:name="es.hol.soundmedia.MainActivity"
Nach all dieser Arbeit. Vielleicht eine einfachere Möglichkeit, dies einzurichten, aber für mich funktioniert der Account. Leider kann ich das Ergebnis nicht anzeigen, da ich gesperrt bin, aber ich hoffe die Anleitung hilft.
Für diejenigen, die keinen manuellen Benutzereingriff in Eclipse benötigen, um einen Build aus dem Checkout zu erstellen, besteht die magische Änderung, die Eclipse vornimmt, darin, eine Zeile zu project.properties hinzuzufügen, wie:
Android.library.reference.1=../Android-support-v7-appcompat
Dies reicht aus, um Ihre Anwendung aus ant zu erstellen. Sie können dies in der Quelle selbst oder über die Eclipse-Benutzeroberfläche tun - so oder so können Sie es in Ihr Versionskontrollsystem einchecken und erfolgreich von einem erneuten Auschecken der Quelle aus erstellen, ohne dass manuelle Schritte erforderlich sind.
Sie können den Pfad jedoch auch zu einem Unterverzeichnis Ihres eigenen Projekts machen, wenn dies besser passt, z.
Android.library.reference.1=Android-support-v7-appcompat
... und ...
cp -r $SDK/extras/Android/support/v7/appcompat Android-support-v7-appcompat
Beachten Sie, dass Eclipse weiterhin verschiedene Warnungen anzeigt, bis das Unterverzeichnis auch [manuell!] Zum Eclipse-Arbeitsbereich als Projekt hinzugefügt wird. Ein Ameisen-Build wird jedoch erfolgreich ohne Verwendung von Eclipse erstellt.
So löse ich das Problem: Bauen Sie das Bibliotheksprojekt android-support-v7-appcompat in Ihrem Eclipse-Arbeitsbereich neu auf. Erstellen Sie dann Ihr eigenes Projekt erneut.
Überprüfen Sie, ob R.Java for appcompat v7 jar in Ihren generierten Ordnern Ihrer Anwendung vorhanden ist