Android Studio 0.4.5
Android-documentatie voor het maken van aangepaste dialoogvensters: http://developer.android.com/guide/topics/ui/dialogs.html
Als u een aangepast dialoogvenster wilt, kunt u in plaats daarvan een Activiteit als een dialoogvenster weergeven in plaats van de Dialog API's te gebruiken. Maak gewoon een activiteit en stel het thema in op Theme.Holo.Dialog in
het <activity>
manifest element:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Echter, toen ik dit probeerde kreeg ik de volgende uitzondering:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Ik ondersteun het volgende, en ik kan'niet iets gebruiken dat groter is dan 10 voor de min:
minSdkVersion 10
targetSdkVersion 19
In mijn stijlen heb ik het volgende:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
En in mijn manifest heb ik dit voor de activiteit:
<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>
Het dialoogvenster op deze manier maken was iets dat ik hoopte te doen, aangezien ik de lay-out al voltooid heb.
Kan iemand mij vertellen hoe ik dit probleem kan omzeilen?
De reden dat u dit probleem heeft is dat de activiteit waarop u het dialoog thema probeert toe te passen de ActionBarActivity
uitbreidt, welke vereist dat het AppCompat
thema wordt toegepast.
Update: Het uitbreiden van AppCompatActivity
zou dit probleem ook hebben
In dit geval, verander de Java overerving van ActionBarActivity
naar Activity
en laat het dialoog thema in het manifest zoals het is, een niet Theme.AppCompat
waarde
De algemene regel is dat als je wilt dat je code oudere versies van Android ondersteunt, deze het AppCompat
thema moet hebben en de java code moet AppCompatActivity
uitbreiden. Als u *een activiteit heeft die deze ondersteuning niet nodig heeft, bijvoorbeeld als u alleen geeft om de nieuwste versies en functies van Android, kunt u elk thema erop toepassen, maar de java code moet de gewone oude Activity
uitbreiden.
OPMERKING: Bij het veranderen van AppCompatActivity
(of een subklasse, ActionBarActivity
), naar Activity
, moet je ook de verschillende aanroepen met "support" veranderen naar de overeenkomstige aanroep zonder "support". Dus, in plaats van getSupportFragmentManager
, roep je getFragmentManager
aan.
Min sdk is 10. ActionBar' is beschikbaar vanaf api niveau 11. Dus voor 10 zou je AppCompat
van de support library moeten gebruiken waarvoor je Theme.AppCompat
of een afstammeling daarvan moet gebruiken.
Gebruik
android:theme="@style/Theme.AppCompat" >
Of als u geen actiebalk bovenaan wilt
android:theme="@style/Theme.AppCompat.NoActionBar">
Meer info @
http://developer.android.com/guide/topics/ui/actionbar.html
Bewerken:
Misschien heb ik op post verkeerd gelezen.
Het lijkt erop dat op een Dialog wil met een Activiteit Thema. Dus zoals reeds voorgesteld door Bobbake4 breid Activity
uit in plaats van ActionBarActivity
.
Kijk ook eens naar Dialog Attributes in de onderstaande link
OPMERKING: Ik had dit als een antwoord bedoeld, maar verdere testen onthullen dat het nog steeds mislukt wanneer gebouwd met behulp van maven vanaf de opdrachtregel, dus ik'heb het moeten bewerken om een probleem te zijn! :-(
In mijn geval toen ik deze fout kreeg was ik al een AppCompat Theme aan het gebruiken en de fout had niet veel zin's.
Ik was bezig met het mavenizeren van mijn android build. Ik had al afhankelijkheden op de apklib en jar versies van app compat, dus:
<!-- 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>
Nu, wanneer ik het maven project importeer en bouw en draai vanuit IntelliJ is het'prima.
Maar als ik bouw en implementeer en uitvoer vanaf de opdrachtregel met maven krijg ik nog steeds deze uitzondering.