È 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?

Soluzione

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 tema AppCompat per essere applicato.

Aggiornamento: Anche l'estensione di AppCompatActivity avrebbe questo problema

In questo caso, cambia l'eredità Java da ActionBarActivity a Activity e lascia il tema del dialogo nel manifesto così com'è, un valore non Theme.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 estendere AppCompatActivity. 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 semplice Activity.


NOTA: quando si passa da AppCompatActivity (o una sottoclasse, ActionBarActivity), ad Activity, bisogna anche cambiare le varie chiamate con "support" alla chiamata corrispondente senza "support". Quindi, invece di getSupportFragmentManager, chiama getFragmentManager.

Commentari (25)

Il min sdk è 10. La ActionBar è disponibile dal livello api 11. Quindi per 10 useresti AppCompat dalla libreria di supporto per cui devi usare Theme.AppCompat o un discendente dello stesso.

Usa

android:theme="@style/Theme.AppCompat" >

O se non vuoi la barra d'azione in alto

android:theme="@style/Theme.AppCompat.NoActionBar">

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 di ActionBarActivity.

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/

Commentari (8)

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:



            android.support
            compatibility-v7-appcompat
            ${compatibility.version}
            apklib



            android.support
            compatibility-v7-appcompat
            jar



            android.support
            compatibility-v7
            jar



            android.support
            compatibility-v4

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.

Commentari (0)