2014-07-03 4 views
23

Ich habe ein neues Projekt für die L-Vorschau erstellt. Die Starter-Aktivität, die das sdk erzeugt erstreckt ActionBarActivity aber, wenn ich versuche, die nackten Knochen erzeugt Aktivität zu laufen, es wirft die folgende Ausnahme:So verwenden Sie ActionBarActivity mit Theme.Material

Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 
      at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:110) 
      at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57) 
      at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:99) 

Ich habe umsah aber Theme.AppCompat.Material scheint nicht zu existieren . Wie mache ich ActionBarActivity, um die neuen Material-Themen zu nutzen?

Mein build.gradle:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 'android-L' 
    buildToolsVersion '20.0.0' 
    defaultConfig { 
     applicationId 'com.sdchang.example' 
     minSdkVersion 'L' 
     targetSdkVersion 'L' 
     versionCode 1 
     versionName '1.0' 
    } 
    buildTypes { 
     release { 
      runProguard false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    productFlavors { 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:21.+' 
    compile 'com.mcxiaoke.volley:library:[email protected]' 
    compile 'com.google.code.gson:gson:2.2.+' 
    compile 'com.squareup.okhttp:okhttp:2.0.+' 
} 
+3

21 + 's '' Theme.AppCompat' erstreckt Theme.Base.AppCompat' der sich '' Theme.Platform.AppCompat' denen sich android: Theme.Material 'auf 21+ Geräten (dh Android L) Geräte. – ianhanniballake

+0

Vielen Dank, das hat mein Problem gelöst. Könnten Sie eine Antwort erstellen, damit es klar ist? –

Antwort

54

AppCompat v21 ändern + 's Theme.AppCompat erweitert Theme.Base.AppCompat die Theme.Platform.AppCompat die android:Theme.Material 21 erstreckt sich auf. + Geräte (dh Android L) Geräte, so dass Sie nichts spezielles tun müssen, um das Thema Material zu erhalten, wenn Sie AppCompat verwenden.

+2

Nur ein Kopf, verwendet die SDK-generierte styles.xml in Res/Werte-V21 @android: Theme.Material.Light. Vielleicht möchten Sie ein Ticket dafür einreichen. –

+1

Ich bin genau auf das gleiche Problem gestoßen, und ich werde jetzt Ihre vorgeschlagene Antwort versuchen. Ich möchte jedoch darauf hinweisen, dass googles Dokumentation unter https://developer.android.com/preview/material/compatibility.html ausdrücklich besagt, dass wir ein separates übergeordnetes Thema im Ordner values-21 haben sollten ... –

+0

Bestätigt: nur Verwenden Sie das AppCompat-Design und auf v21 erhalten Sie Material. Ich benutze Theme.AppCompat.Light.DarkActionBar und verfolgt seine Eltern zu Theme.Material.Light.DarkActionBar für v21 +. Im Emulator ist meine Actionleiste jedoch nicht wirklich dunkel, aber das ist immerhin eine Vorschau. Die Elternstruktur ist Klang und diese Antwort ist korrekt. –

3

Sie benötigen Abhängigkeit in der Build gradle zu

compile 'com.android.support:appcompat-v7:21.+' 
+0

Leider ist das nicht wahr. 21. + ist bereits der Standard, der vom SDK generiert wird. –

+0

Haben Sie compileSdkVersion 'android-L'? Können Sie bitte Ihren Gradle.build bereitstellen? –

+0

Hier gehts los !!!! –

-1

Verwenden Sie das folgende Thema:.

android:theme="@style/Base.V7.Theme.AppCompat" > 
+0

Das muss android sein: theme = "@ style/stylename" und die appcompat_v7-Bibliothek müssen mit dem Projekt verknüpft sein. Und in styles.xml muss das übergeordnete Element parent = "@ style/Theme.AppCompat.Light.DarkActionBar" oder Ihrer Wahl –

+0

sein Um die Frage zu kritisieren oder um eine Klärung von einem Autor zu bitten, hinterlassen Sie einen Kommentar unter ihrem Beitrag - Sie können Ihre eigenen Beiträge jederzeit kommentieren und sobald Sie genügend [Reputation] haben (http://stackoverflow.com/help/whats -Reputation) können Sie [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment) –

+1

@ManishDubey Sure sieht wie eine Antwort zu mir aus. – EJP