È necessario utilizzare un tema Theme.AppCompat (o discendente) con questa attività
Android Studio 0.4.5
Documentazione Android per la creazione di finestre di dialogo personalizzate: http://developer.android.com/guide/topics/ui/dialogs.html
Se si desidera una finestra di dialogo personalizzata, è invece possibile visualizzare un'attività come una finestra di dialogo invece di utilizzare le API Dialog. Basta creare un'attività e impostare il suo tema su Theme.Holo.Dialog in
l'elemento manifest <activity>
:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Tuttavia, quando ho provato questo ottengo la seguente eccezione:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Sto sostenendo quanto segue, e non posso usare qualcosa di più grande di 10 per il min:
minSdkVersion 10
targetSdkVersion 19
Nei miei stili ho il seguente:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
E nel mio manifesto ho questo per l'attività:
<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>
Creare la finestra di dialogo in questo modo era qualcosa che stavo saltando per fare, dato che ho già completato il layout.
Qualcuno può dirmi come posso aggirare questo problema?
La ragione per cui stai avendo questo problema è che l'attività a cui stai cercando di applicare il tema di dialogo sta estendendo
ActionBarActivity
che richiede il temaAppCompat
per essere applicato.Aggiornamento: Anche l'estensione di
AppCompatActivity
avrebbe questo problemaIn questo caso, cambia l'eredità Java da
ActionBarActivity
aActivity
e lascia il tema del dialogo nel manifesto così com'è, un valore nonTheme.AppCompat
.La regola generale è che se vuoi che il tuo codice supporti le vecchie versioni di Android, dovrebbe avere il tema
AppCompat
e il codice java dovrebbe estendereAppCompatActivity
. Se hai *un'attività che non ha bisogno di questo supporto, come se ti interessassero solo le ultime versioni e caratteristiche di Android, puoi applicare qualsiasi tema ad essa ma il codice java deve estendere la vecchia e sempliceActivity
.NOTA: quando si passa da
AppCompatActivity
(o una sottoclasse,ActionBarActivity
), adActivity
, bisogna anche cambiare le varie chiamate con "support" alla chiamata corrispondente senza "support". Quindi, invece digetSupportFragmentManager
, chiamagetFragmentManager
.Il min sdk è 10. La
ActionBar
è disponibile dal livello api 11. Quindi per 10 userestiAppCompat
dalla libreria di supporto per cui devi usareTheme.AppCompat
o un discendente dello stesso.Usa
O se non vuoi la barra d'azione in alto
Maggiori informazioni @
http://developer.android.com/guide/topics/ui/actionbar.html
Modifica:
Potrei aver letto male l'op post.
Sembra che op voglia un dialogo con un tema di attività. Quindi, come già suggerito da Bobbake4, estendi
Activity
invece diActionBarActivity
.Dai anche un'occhiata agli attributi della finestra di dialogo nel link qui sotto
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/
NOTA: avevo inteso questo come una risposta, ma ulteriori test rivelano che fallisce ancora quando costruito usando maven dalla riga di comando, quindi ho dovuto modificarlo per essere un problema! :-(
Nel mio caso quando ho avuto questo errore stavo già usando un Tema AppCompat e l'errore non aveva molto senso.
Ero nel processo di mavenizing della mia build di Android. Avevo già dipendenze sulle versioni apklib e jar di app compat, quindi:
Ora, quando importo il progetto maven e costruisco ed eseguo da IntelliJ va bene.
Ma quando costruisco e distribuisco ed eseguo dalla riga di comando con maven ottengo ancora questa eccezione.