2014-07-03 10 views
23

Stworzyłem nowy projekt ukierunkowany na podgląd L. Aktywność rozrusznik że SDK generuje rozciąga ActionBarActivity jednak, gdy próbuję uruchomić gołą kość generowane z działalności, to rzuca następujący wyjątek:Jak używać ActionBarActivity z 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) 

Mam rozejrzał ale Theme.AppCompat.Material wydaje się nie istnieć . Jak zrobić ActionBarActivity, aby wykorzystać nowe tematy Material?

Moja 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 + jest 'Theme.AppCompat' rozciąga' Theme.Base.AppCompat' która rozciąga 'Theme.Platform.AppCompat' która rozciąga' ANDROID Theme.Material 'na ponad 21 urządzeniach (tj. Android L). – ianhanniballake

+0

Wielkie dzięki, to rozwiązało mój problem. Czy możesz stworzyć odpowiedź, aby była jasna? –

Odpowiedz

54

AppCompat V21 + 's Theme.AppCompat rozciąga Theme.Base.AppCompat która rozciąga Theme.Platform.AppCompat która rozciąga android:Theme.Material na 21. + urządzeń (tj. Android L), więc nie powinieneś robić nic konkretnego, aby uzyskać motyw Material, jeśli używasz AppCompat.

+2

Po prostu heads up, style SDK generowane.xml w res/values-v21 używa @android: Theme.Material.Light. Możesz złożyć bilet na ten temat. –

+1

Występuję w dokładnie tym samym problemie i teraz wypróbuję proponowaną odpowiedź. Ale chciałbym podkreślić, że dokumenty Google'a na https://developer.android.com/preview/material/compatibility.html wyraźnie mówią, że powinniśmy mieć oddzielny motyw macierzysty w folderze values-21 ... –

+0

Potwierdzone: tylko użyj motywu AppCompat, a na v21 otrzymasz Materiał. Używam Theme.AppCompat.Light.DarkActionBar i śledziłem jego rodziców do Theme.Material.Light.DarkActionBar dla v21 +. Jednak w emulatorze mój pasek akcji nie jest tak naprawdę ciemny, ale jest to w końcu podgląd. Struktura macierzysta jest dobra i ta odpowiedź jest prawidłowa. –

3

trzeba zmienić w zależności budowania Gradle do

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

Niestety, to nie jest to. 21. + jest już domyślnie wygenerowany przez SDK. –

+0

Czy masz compileSdkVersion 'android-L'? Czy możesz podać swój gradle.build? –

+0

Tutaj jesteś !!!! –

-1

Poniższa motywu.

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

To musi być Android: theme = "@ style/stylename" i biblioteka appcompat_v7 musi być powiązana z projektem, a w pliku styles.xml rodzic musi być parent = "@ style/Theme.AppCompat.Light.DarkActionBar" lub do wyboru –

+0

Nie zapewnia to odpowiedź na pytanie: aby skrytykować lub poprosić o wyjaśnienie od autora, zostaw komentarz pod swoim postem - zawsze możesz komentować swoje posty, a gdy już masz wystarczającą [reputację] (http://stackoverflow.com/help/whats) -reputacja) będzie można [komentować dowolny wpis]. (http://stackoverflow.com/help/privileges/comment). –

+1

@ManishDubey Sure wygląda jak odpowiedź na mnie. – EJP

Powiązane problemy