Android Studio 0.4.5
Dokumentacja Androida do tworzenia niestandardowych okien dialogowych: http://developer.android.com/guide/topics/ui/dialogs.html
Jeśli chcesz mieć niestandardowe okno dialogowe, możesz zamiast tego wyświetlić działanie jako okno dialogowe zamiast korzystać z interfejsów API Dialog. Po prostu utwórz działanie i ustaw jego motyw na Theme.Holo.Dialog w <activity>
elemencie manifestu:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Jednak gdy spróbowałem tego, otrzymuję następujący wyjątek:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Wspieram następujące i nie mogę użyć czegoś większego niż 10 dla min:
minSdkVersion 10
targetSdkVersion 19
W moich stylach mam następujące:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
I w moim manifeście mam to do działania:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:theme="@android:style/Theme.Holo.Light.Dialog"
android:name="com.ssd.register.Dialog_update"
android:label="@string/title_activity_dialog_update" >
</activity>
Utworzenie takiego okna dialogowego było czymś, co miałem nadzieję zrobić, ponieważ już ukończyłem układ.
Czy ktoś może mi powiedzieć, jak mogę obejść ten problem?
źródło
AppCompat
który jest z biblioteki wsparcia do obsługi pasków akcji poniżej poziomu interfejsu API 11. Po prostu użyjandroid:theme="@style/AppTheme" >
do działania w manifeścieAndroidManifest.xml
dla swojej działalności, przesłaniasz motyw , który określasz dla swojej aplikacji. Usuńandroid:theme
linię ze<activity>
znacznika.Odpowiedzi:
Przyczyną tego problemu jest to, że działanie, do którego próbujesz zastosować motyw okna dialogowego, rozszerza się,
ActionBarActivity
co wymaga zastosowaniaAppCompat
motywu.Aktualizacja : rozszerzenie
AppCompatActivity
również miałoby ten problemW takim przypadku zmień dziedziczenie Java z
ActionBarActivity
naActivity
i pozostaw motyw okna dialogowego w manifeście bezTheme.AppCompat
wartościOgólna zasada jest taka, że jeśli chcesz, aby Twój kod obsługiwał starsze wersje Androida, powinien mieć
AppCompat
motyw, a kod Java powinien się rozszerzyćAppCompatActivity
. Jeśli masz * działanie, które nie potrzebuje tego wsparcia, na przykład jeśli zależy Ci tylko na najnowszych wersjach i funkcjach Androida, możesz zastosować do niego dowolny motyw, ale kod Java musi być prostyActivity
.UWAGA: W przypadku zmiany z
AppCompatActivity
(lub podklasyActionBarActivity
) naActivity
, należy również zmienić różne połączenia z „wsparciem” na odpowiednie połączenie bez „wsparcia”. ZamiastgetSupportFragmentManager
dzwonićgetFragmentManager
.źródło
ActionBarActivity
to, co pokazano w jego instrukcjach importu z komentarza poniżej pytania.Wszystko, co musisz zrobić, to dodać
android:theme="@style/Theme.AppCompat.Light"
do znacznika aplikacji wAndroidManifest.xml
pliku.źródło
Kopiowanie odpowiedzi z @MarkKeen w powyższych komentarzach, ponieważ miałem ten sam problem.
Wystąpił błąd podany u góry postu i zdarzyło się po dodaniu okna dialogowego z ostrzeżeniem. Mam wszystkie odpowiednie informacje o stylu w manifeście. Mój problem został rozwiązany przez zmianę odwołania do kontekstu w kreatorze alertów - zmieniłem:
do:
I żadnych problemów.
źródło
getActivity()
raczej niżthis
jak sugerowano powyżej, a problem zostanie rozwiązany. Jeśli chodzi o powód, mogę tylko przypuszczać, że starszy kod AlertDialog.Builder (xxx) albo chciał przekazać inny typ, albo był po prostu mniej wybredny w kwestii tego, co zostało przekazane, podczas gdy obecny Builder () naprawdę naprawdę chce działania. Ponieważ Google zdecydowało się ukryć (usunąć?) Dokumentację starego kodu, prawdopodobnie w celu zachęcenia do korzystania z wersji v7.app, nie wiem na pewno.getContext()
zamiast,this
jeśli jesteś w ArrayAdapter lub podobnej klasie adaptera.min sdk to 10.
ActionBar
jest dostępny z poziomu interfejsu API 11. Tak więc dla 10 będziesz korzystaćAppCompat
z biblioteki wsparcia, do której musisz użyćTheme.AppCompat
lub z niego.Posługiwać się
Lub jeśli nie chcesz paska akcji na górze
Więcej informacji @
http://developer.android.com/guide/topics/ui/actionbar.html
Edytować:
Być może błędnie odczytałem post.
Wygląda na to, że chce dialogu z motywem działania. Jak już sugerował Bobbake4,
Activity
zamiast rozszerzaćActionBarActivity
.Zobacz także atrybuty @ Dialog w linku poniżej
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/
źródło
Jeśli korzystasz z kontekstu aplikacji, wykonaj następujące czynności:
zmień go na kontekst działania taki jak ten:
źródło
Wystąpił ten problem, mimo że mój motyw był
AppCompat
motywem, a moja aktywność byłaAppCompatActivity
(lubActivity
, jak sugerowano w odpowiedziach innych). Więc wyczyściłem, przebudowałem i uruchomiłem ponownie projekt.( Kompilacja -> Wyczyść projekt; Kompilacja -> Przebuduj projekt; Uruchom -> Uruchom )
To może wydawać się głupie, ale teraz działa świetnie !
Mam tylko nadzieję, że to pomoże!
źródło
To właśnie to dla mnie naprawiło: zamiast określać temat w manifeście, zdefiniowałem go
onCreate
dla każdego działania, które rozszerzaActionBarActivity
:Oto
MyAppTheme
potomekTheme.AppCompat
i jest zdefiniowany w XML. Pamiętaj, że motyw musi być ustawiony przedsuper.onCreate
isetContentView
.źródło
idź do swoich stylów i postaw rodzica
zamiast
źródło
W moim przypadku nie mam pliku wartości-v21 w moim katalogu res. Następnie utworzyłem go i dodałem w nim następujące kody:
źródło
Zmień motyw żądanego działania. To działa dla mnie:
źródło
Miałem taką awarię na urządzeniach Samsunga , mimo że aktywność korzystała z Theme.AppCompat . Główna przyczyna była związana z dziwnymi optymalizacjami po stronie Samsunga:
Moje rozwiązanie właśnie usuwało
android:launchMode="singleTask"
źródło
Jeśli chcesz rozszerzyć ActionBarActivity, potrzebujesz w pliku style.xml:
Jeśli ustawisz jako główny motyw aplikacji jako Android: Theme.Material.Light zamiast AppTheme.Base , otrzymasz błąd „IllegalStateException: Musisz użyć motywu Theme.AppCompat (lub elementu potomnego) z tą aktywnością”.
źródło
Po prostu zrób
Zamiast
źródło
this
oczekiwany.Miałem ten sam problem, ale problem został rozwiązany, gdy włączyłem ten manifest: android: theme = "@ style / Theme.AppCompat.
źródło
W moim przypadku taki problem pojawił się, gdy próbowałem wyświetlić okno dialogowe. Problem tkwił w kontekście, użyłem getBaseContext (), który teoretycznie powinien zwrócić kontekst działania, ale wydaje się, że nie, lub zwraca kontekst przed zastosowaniem dowolnego motywu.
Właśnie zastąpiłem getBaseContexts () słowem „ this ”, a teraz działa zgodnie z oczekiwaniami.
źródło
Miałem aktywność z motywem
<android:theme="@android:style/Theme.Dialog">
służącym do wyświetlania okna dialogowego w mojej aplikacji Widget i miałem ten sam problemRozwiązałem ten błąd, zmieniając kod aktywności, jak poniżej:
źródło
dla mnie było rozwiązanie do użycia ContextThemeWrapper:
z Androida - Jak programowo tworzyć FAB?
źródło
Upewnij się, że używasz kontekstu działania podczas tworzenia nowego okna dialogowego alertu, a nie kontekstu aplikacji lub podstawowego.
źródło
Miałem również ten problem i to, co zrobiłem, aby go naprawić, ORAZ nadal korzystałem z motywu Holo, wykonując następujące kroki:
najpierw zastąpiłem ten import:
z tym:
następnie zmieniłem moje rozszerzenie z:
do tego:
A także musiał zmienić ten import:
do tego importu:
a następnie możesz użyć tagu tematu w manifeście na poziomie aktywności:
i na koniec (chyba że masz w swoim projekcie inne klasy, które muszą korzystać z v7 appCompat) możesz wyczyścić i przebudować swój projekt lub usunąć ten wpis z pliku budowania stopni na poziomie aplikacji:
jeśli masz w projekcie inne klasy, które muszą korzystać z v7 appCompat, po prostu wyczyść i przebuduj projekt.
źródło
Przyszedłeś do tego, ponieważ chcesz zastosować Material Design w swoim stylu motywu we wcześniejszych wersjach SDK do 21.
ActionBarActivity
Wymaga to,AppTheme
więc jeśli chcesz również zapobiec własnej personalizacji AppTheme, tylko musisz zmienić style.xml (poprzedni do sdk 21), aby w ten sposób można odziedziczyć motyw App Compat.dla tego:
źródło
Zmień styl nadrzędny stylu motywu na
To działało dla mnie ...
źródło
Masz wiele rozwiązań tego błędu.
Powinieneś użyć Activity lub FragmentActivity zamiast ActionbarActivity lub AppCompatActivity
Jeśli chcesz użyć ActionbarActivity lub AppCompatActivity , powinieneś zmienić w styles.xml Theme.Holo.xxxx na Theme.AppCompat.Light (w razie potrzeby dodaj do DarkActionbar )
Jeśli nie potrzebujesz zaawansowanych atrybutów dotyczących paska akcji lub AppCompat , nie musisz używać Actionbar lub AppCompat .
źródło
W manifeście Androida wystarczy zmienić motyw aktywności na AppTheme, postępując zgodnie z fragmentem kodu
źródło
To jest, gdy chcesz AlertDialog we fragmencie
źródło
W moich doświadczeniach problemem był kontekst, w którym pokazałem swój dialog. Wewnątrz przycisku kliknięcia tworzę instancję AlertDialog w następujący sposób:
Ale kontekst był niepoprawny i spowodował błąd. Zmieniłem to za pomocą kontekstu aplikacji w następujący sposób:
W sekcji deklaracji:
w metodzie onCreate
I wreszcie w kodzie, w którym potrzebuję AlertDialog:
To jest dla mnie rozwiązanie.
źródło
Ten działał dla mnie:
źródło
Twoja aktywność rozszerza ActionBarActivity, która wymaga zastosowania AppCompat.theme . Zmiana z ActionBarActivity na Activity lub FragmentActivity rozwiąże problem.
źródło
Miałem ten sam problem. Ponieważ tworzyłem niestandardową szufladę nawigacji. Ale zapomniałem wspomnieć o temacie w moim manifeście w ten sposób
Gdy tylko dodałem powyższy motyw do mojego manifestu, rozwiązało to problem.
źródło
Szybkie rozwiązanie
Zmień nadrzędny motyw podstawowy w styles.xml
Zamień z
do
źródło
To rozwiązanie działało dla mnie.
Biblioteka projektu zależy od Support Support v4 i AppCompat Library, więc nie używaj innej wersji dla appcompat i biblioteki projektów w gradate.
posługiwać się
zamiast
źródło