Otrzymuję RuntimeException na Androidzie 2.3.5, ale ja jestem za pomocą Theme.AppCompat (RES / wartości / themes.xml). To jest telefon: http://www.gsmarena.com/samsung_galaxy_y_s5360-4117.php
<!-- res/values/themes.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Styled" parent="@style/Theme.AppCompat">
<item name="actionBarStyle">@style/QueryActionBar</item>
<item name="android:actionBarStyle">@style/QueryActionBar</item>
</style>
<style name="QueryActionBar" parent="@style/Widget.AppCompat.ActionBar">
<item name="background">@color/blueback</item>
<item name="android:background">@color/blueback</item>
<item name="backgroundSplit">@color/blueback</item>
<item name="android:backgroundSplit">@color/blueback</item>
</style>
</resources>
Oto plik wartości-v11.
<!-- res/values-v11/themes.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="QueryTheme" parent="@android:style/Theme.Holo">
<!-- Any customizations for your app running on devices with Theme.Holo here -->
</style>
</resources>
Oto błąd.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.txt2lrn.www/com.txt2lrn.www.LandingActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
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:102)
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
at com.txt2lrn.www.LandingActivity.onCreate(LandingActivity.java:95)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
... 11 more
Przepraszam, mam też android: theme = "@ style / Theme.Styled" zdefiniowany w AndroidManifest.xml.
Theme.Styled
?Odpowiedzi:
Jeśli rozszerzasz ActionBarActivity w swoim MainActivity, będziesz musiał również zmienić motyw nadrzędny w values-v11.
Więc style.xml w values-v11 będzie -
EDYCJA: Zalecam zaprzestanie używania ActionBar i rozpoczęcie korzystania z układu AppBar zawartego w bibliotece Android Design Support Library
źródło
Aby po prostu dodać ActionBar Compat, swoją aktywność lub aplikację należy użyć motywu @ style / Theme.AppCompat w AndroidManifest.xml w następujący sposób:
Spowoduje to dodanie paska akcji do aktywności (lub wszystkich działań, jeśli dodałeś ten motyw do aplikacji)
Ale zwykle musisz dostosować pasek akcji. Aby to zrobić, musisz utworzyć dwa style za pomocą elementu nadrzędnego Theme.AppCompat, na przykład „@ style / Theme.AppCompat.Light”. Pierwsza będzie dla api 11> = (wersje Androida z wbudowanym paskiem akcji android), druga dla api 7-10 (brak kompilacji w pasku akcji).
Spójrzmy na pierwszy styl. Będzie się znajdować w res / values-v11 / styles.xml . Będzie to wyglądać tak:
I musisz mieć ten sam styl dla API 7-10. Będzie znajdował się w res / values / styles.xml , ALE ponieważ poziomy api nie wiedzą jeszcze o oryginalnych elementach w stylu paska akcji systemu Android, powinniśmy użyć jednego, dostarczonego przez bibliotekę wsparcia. Elementy ActionBar Compat są zdefiniowane tak samo jak w oryginalnym systemie Android, ale bez części „android:” na początku:
Proszę zaznaczyć, że nawet jeśli poziomy api wyższe niż 10 mają już pasek akcji, nadal powinieneś używać stylów AppCompat. Jeśli tego nie zrobisz, pojawi się ten błąd podczas uruchamiania Acitvity na urządzeniach z Androidem 3.0 i nowszym:
Oto link do tego oryginalnego artykułu http://android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html napisanego przez Chrisa Banesa.
PS Przepraszam za mój angielski
źródło
Sprawdź i upewnij się, że nie masz innego folderu wartości, który odwołuje się do theme.styled i nie używa motywu AppCompat
ie
values-v11
folderźródło
Spróbuj tego...
style.xml
AndroidManifest.xml
źródło
Twój
Activity
rozszerza się,ActionBarActivity
co wymagaAppCompat.theme
zastosowania. ZmieńActionBarActivity
naActivity
lubFragmentActivity
, rozwiąże to problem.źródło
Po prostu zrób to Kompiluj -> Wyczyść projekt. Myślę, że to rozwiąże twój problem.
źródło
Jasne, że tak. Nic w magiczny sposób nie zastosuje się
Theme.Styled
do czynności. Musisz zadeklarować swoje działania - lub całą swoją aplikację - wykorzystujeTheme.Styled
np .:źródło
Napotkałem ten błąd, gdy próbowałem utworzyć DialogBox, gdy w klasie CustomAdapter wykonywana jest pewna akcja. To nie było działanie, ale klasa adaptera. Po 36 godzinach wysiłków i szukaniu rozwiązań wpadłem na to.
Wyślij działanie jako parametr podczas wywoływania CustomAdapter.
Zdefiniuj zmienne w niestandardowym adapterze.
Wywołaj konstruktora w ten sposób.
I na koniec podczas tworzenia okna dialogowego w klasie adaptera zrób to w ten sposób.
mam nadzieję, że to Ci pomoże
źródło
Po prostu otrzymuję przeniesienie mojej aplikacji z ActionBarSherlock do ActionBarCompat. Spróbuj zadeklarować swój stary motyw w następujący sposób:
Następnie ustaw motyw w pliku AndroidManifest.xml:
źródło
Miałem taką awarię urządzeniach Samsung , mimo że aktywność korzystała z Theme.AppCompat . Główna przyczyna była związana z dziwnymi optymalizacjami po stronie Samsunga:
Moje rozwiązanie polegało na usunięciu
android:launchMode="singleTask"
źródło
android:launchMode="singleTask"
.android:launchMode="singleTask"
i wszystkie moje działania wykorzystują motyw AppCompat: /w moim przypadku utworzyłem niestandardowy widok, który dodałem do konstruktora widoku niestandardowego
poprawnym kontekstem jest aktywność, więc zmieniono go na:
lub
źródło
W moim widoku listy używam niestandardowego adaptera, który rozszerza ArrayAdapter. w listiview mam 2 przyciski, jeden z przycisków jako Custom AlertDialogBox. Np .: aktywność parentActivity; Konstruktor adaptera `
`wywołując Adapter z MainActivty
teraz wpisz ur alertdialog w przycisku ur, który jest w klasie Adapter
źródło
para resolver o meu problema, eu apenas adicionei na minha MainActivity ("Theme = Aby rozwiązać mój problem, właśnie dodałem go do mojego MainActivity (" Theme = "@ style / MyTheme" "), gdzie MyTheme to nazwa mojego motywu
źródło