Android Studio 0.4.5
Android-dokumentasjon for oppretting av egendefinerte dialogbokser: http://developer.android.com/guide/topics/ui/dialogs.html
Hvis du vil ha en egendefinert dialogboks, kan du i stedet vise en aktivitet som en dialogboks i stedet for å bruke dialog-API-ene. Du oppretter ganske enkelt en aktivitet og angir temaet til Theme.Holo.Dialog i
manifestelementet <activity>
:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Men da jeg prøvde dette, fikk jeg følgende unntak:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Jeg støtter følgende, og jeg kan ikke bruke noe større enn 10 for min:
minSdkVersion 10
targetSdkVersion 19
I stilene mine har jeg følgende:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Og i manifestet mitt har jeg dette for aktiviteten:
<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>
Å lage dialogboksen på denne måten var noe jeg hadde tenkt å gjøre, siden jeg allerede har fullført layouten.
Kan noen fortelle meg hvordan jeg kan omgå dette problemet?
Årsaken til at du har dette problemet, er at aktiviteten du prøver å bruke dialogtemaet på, utvider ActionBarActivity
, som krever at temaet AppCompat
brukes.
Oppdatering: Dette problemet oppstår også ved utvidelse av AppCompatActivity
.
I dette tilfellet endrer du Java-arven fra ActionBarActivity
til Activity
og lar dialogtemaet i manifestet være som det er, en verdi som ikke er Theme.AppCompat
.
Den generelle regelen er at hvis du vil at koden din skal støtte eldre versjoner av Android, bør den ha AppCompat
-temaet, og javakoden bør utvide AppCompatActivity
. Hvis du har *en aktivitet som ikke trenger denne støtten, f.eks. hvis du bare bryr deg om de nyeste versjonene og funksjonene i Android, kan du bruke et hvilket som helst tema på den, men javakoden må utvide Activity
.
MERK: Når du endrer fra AppCompatActivity
(eller en underklasse, ActionBarActivity
) til Activity
, må du også endre de ulike kallene med "support" til tilsvarende kall uten "support". Så i stedet for getSupportFragmentManager
, kaller du getFragmentManager
.
min sdk er 10. ActionBar
er tilgjengelig fra api-nivå 11. Så for 10 vil du bruke AppCompat
fra støttebiblioteket som du må bruke Theme.AppCompat
eller etterkommer av det samme.
Bruk
android:theme="@style/Theme.AppCompat" >
Eller hvis du ikke vil ha en handlingslinje øverst i menyen
android:theme="@style/Theme.AppCompat.NoActionBar">
Mer informasjon @
http://developer.android.com/guide/topics/ui/actionbar.html
Rediger:
Jeg kan ha lest innlegget feil.
Ser ut til at op ønsker en dialog med et aktivitetstema. Så som allerede foreslått av Bobbake4 utvide Activity
i stedet for ActionBarActivity
.
Ta også en titt på dialogattributter i lenken nedenfor
MERK: Jeg hadde tenkt dette som et svar, men videre testing viser at det fortsatt mislykkes når det bygges med maven fra kommandolinjen, så jeg har måttet redigere det til å være et problem :-(.
I mitt tilfelle, da jeg fikk denne feilen, brukte jeg allerede et AppCompat Theme, og feilen ga ikke mye mening.
Jeg var i ferd med å mavenizing min android build. Jeg hadde allerede avhengigheter av apklib- og jar-versjonene av app compat, dermed:
<!-- 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>
Nå, når jeg importerer maven-prosjektet og bygger og kjører fra IntelliJ, går det bra.
Men når jeg bygger og distribuerer og kjører fra kommandolinjen med maven, får jeg fortsatt dette unntaket.