Android Studio 0.4.5
Android-dokumentation för att skapa egna dialogrutor: http://developer.android.com/guide/topics/ui/dialogs.html
Om du vill ha en anpassad dialogruta kan du istället visa en aktivitet som en dialogruta i stället för att använda dialog-API:erna. Skapa helt enkelt en aktivitet och ställ in dess tema till Theme.Holo.Dialog i
manifestelementet <activity>
:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
När jag försökte detta fick jag dock följande undantag:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Jag stöder följande och jag kan inte använda något större än 10 för min:
minSdkVersion 10
targetSdkVersion 19
I mina stilar har jag följande:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Och i mitt manifest har jag detta för 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>
Att skapa dialogrutan på det här sättet var något som jag hoppades på att göra, eftersom jag redan har färdigställt layouten.
Kan någon tala om för mig hur jag kan komma runt detta problem?
Orsaken till problemet är att aktiviteten som du försöker tillämpa dialogtemat på utökar ActionBarActivity
som kräver att temat AppCompat
tillämpas.
uppdatering: Om man utökar AppCompatActivity
skulle man också få detta problem.
I det här fallet ändrar du Java-arvet från ActionBarActivity
till Activity
och lämnar dialogtemat i manifestet som det är, ett värde som inte är Theme.AppCompat
.
Den allmänna regeln är att om du vill att din kod ska ha stöd för äldre versioner av Android bör den ha temat AppCompat
och javakoden bör förlänga AppCompatActivity
. Om du har *en aktivitet som inte behöver detta stöd, t.ex. om du bara bryr dig om de senaste versionerna och funktionerna av Android, kan du tillämpa vilket tema som helst på den, men java-koden måste utöka vanlig Activity
.
OBS: När du ändrar från AppCompatActivity
(eller en underklass, ActionBarActivity
) till Activity
, måste du också ändra de olika anropen med "support" till motsvarande anrop utan "support". Så i stället för getSupportFragmentManager
, anropar du getFragmentManager
.
Min sdk är 10. ActionBar
är tillgänglig från api-nivå 11. Så för 10 skulle du använda AppCompat
från supportbiblioteket för vilket du måste använda Theme.AppCompat
eller en efterföljare av samma.
Använd
android:theme="@style/Theme.AppCompat" >
Eller om du inte vill ha en aktivitetsfältet längst upp
android:theme="@style/Theme.AppCompat.NoActionBar">
Mer information @
http://developer.android.com/guide/topics/ui/actionbar.html
Redigera:
Jag kan ha missuppfattat op post.
Det verkar som om han vill ha en dialog med ett aktivitetstema. Så som Bobbake4 redan föreslagit utökar han Activity
istället för ActionBarActivity
.
Ta också en titt på Dialog Attributes i länken nedan.
OBS: Jag hade tänkt att detta skulle vara ett svar, men ytterligare tester visar att det fortfarande misslyckas när det byggs med maven från kommandoraden, så jag har varit tvungen att redigera det till att vara ett problem! :-(
I mitt fall när jag fick det här felet använde jag redan ett AppCompat-tema och felet var inte särskilt meningsfullt.
Jag var i färd med att mavenisera min android build. Jag hade redan beroenden på apklib- och jar-versionerna av app compat, alltså:
<!-- 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 när jag importerar mavenprojektet och bygger och kör från IntelliJ så går det'bra.
Men när jag bygger och distribuerar och kör från kommandoraden med maven får jag fortfarande detta undantag.