Android Studio 0.4.5
Dokumentacja Androida dotycząca 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ć aktywność jako okno dialogowe, zamiast używać API Dialogu. Po prostu utwórz aktywność i ustaw jej motyw na Theme.Holo.Dialog w
elemencie manifestu <activity>
:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Jednak, gdy pró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
Obsługuję następujące elementy i nie mogę'użyć czegoś większego niż 10 dla min:
minSdkVersion 10
targetSdkVersion 19
W moich stylach mam następujące elementy:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
A w moim manifeście mam to dla aktywności:
<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>
Stworzenie okna dialogowego w ten sposób 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?
Powodem, dla którego masz ten problem jest to, że aktywność, do której próbujesz zastosować motyw okna dialogowego jest rozszerzeniem ActionBarActivity
, które wymaga zastosowania motywu AppCompat
.
Uaktualnienie: Rozszerzenie AppCompatActivity
również będzie miało ten problem
W tym przypadku, zmień dziedziczenie Java z ActionBarActivity
na Activity
i pozostaw motyw dialogowy w manifeście tak jak jest, bez wartości Theme.AppCompat
.
Ogólna zasada jest taka, że jeśli chcesz, aby twój kod obsługiwał starsze wersje Androida, powinien mieć motyw AppCompat
, a kod java powinien rozszerzyć AppCompatActivity
. Jeśli masz *aktywność, która nie potrzebuje tego wsparcia, np. zależy ci tylko na najnowszych wersjach i funkcjach Androida, możesz zastosować dowolny temat, ale kod java musi rozszerzyć zwykłą starą Activity
.
UWAGA: Kiedy zmieniasz z AppCompatActivity
(lub podklasy, ActionBarActivity
), na Activity
, musisz także zmienić różne wywołania z "support" na odpowiadające im wywołania bez "support". Tak więc, zamiast getSupportFragmentManager
, wywołaj getFragmentManager
.
min sdk wynosi 10. Pasek akcji ActionBar
jest dostępny od poziomu api 11. Więc dla 10 używałbyś AppCompat
z biblioteki wsparcia, dla której musisz użyć Theme.AppCompat
lub potomka tego samego.
Użyj
android:theme="@style/Theme.AppCompat" >
Lub jeśli nie chcesz paska akcji na górze
android:theme="@style/Theme.AppCompat.NoActionBar">
Więcej informacji @
http://developer.android.com/guide/topics/ui/actionbar.html
Edytuj:
Możliwe, że źle przeczytałem op post.
Wygląda na to, że op chce Dialog z motywem aktywności. Więc jak już zasugerował Bobbake4 rozszerz Activity
zamiast ActionBarActivity
.
Spójrz także na atrybuty dialogu w poniższym linku
UWAGA: Zamierzałem to jako odpowiedź, ale dalsze testowanie ujawnia, że nadal zawodzi, gdy jest budowany przy użyciu maven z wiersza poleceń, więc I've musiał edytować to, aby być problemem! :-(
W moim przypadku, kiedy dostałem ten błąd, używałem już AppCompat Theme i błąd nie miał sensu.
Byłem w trakcie mavenizacji mojego androidowego builda. Miałem już zależności od apklib i jar wersji app compat, więc:
<!-- See https://github.com/mosabua/maven-android-sdk-deployer -->
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7-appcompat</artifactId>
<version>${compatibility.version}</version>
<type>apklib</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7-appcompat</artifactId>
<type>jar</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7</artifactId>
<type>jar</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v4</artifactId>
</dependency>
Teraz, gdy importuję projekt maven i buduję i uruchamiam z IntelliJ to's dobrze.
Ale kiedy buduję i wdrażam i uruchamiam z wiersza poleceń z mavenem, wciąż dostaję ten wyjątek.