Es necesario utilizar un tema Theme.AppCompat (o descendiente) con esta actividad

Android Studio 0.4.5

Documentación de Android para crear cuadros de diálogo personalizados: http://developer.android.com/guide/topics/ui/dialogs.html

Si quieres un cuadro de diálogo personalizado, puedes mostrar una Actividad como un cuadro de diálogo en lugar de utilizar las APIs de Diálogo. Simplemente cree una actividad y establezca su tema a Theme.Holo.Dialog en el elemento manifiesto <activity>:

<activity android:theme="@android:style/Theme.Holo.Dialog" >

Sin embargo, cuando he intentado esto me sale la siguiente excepción:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity

Estoy apoyando lo siguiente, y no puedo'usar algo mayor que 10 para el min:

minSdkVersion 10
targetSdkVersion 19

En mis estilos tengo lo siguiente:

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

Y en mi manifiesto tengo esto para la actividad:

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

Crear el cuadro de diálogo así era algo que esperaba hacer, pues ya he completado el diseño.

¿Puede alguien decirme cómo puedo evitar este problema?

Solución

La razón por la que está teniendo este problema es porque la actividad a la que está tratando de aplicar el tema de diálogo está extendiendo ActionBarActivity que requiere el tema AppCompat para ser aplicado.

**Actualización: La extensión de AppCompatActivity también tendría este problema

En este caso, cambie la herencia Java de ActionBarActivity a Activity y deje el tema de diálogo en el manifiesto como está, un valor no Theme.AppCompat.


La regla general es que si quieres que tu código sea compatible con versiones antiguas de Android, debe tener el tema AppCompat y el código java debe extender AppCompatActivity. Si tienes *una actividad que no necesita este soporte, como si sólo te importaran las últimas versiones y características de Android, puedes aplicarle cualquier tema pero el código java debe extender la antigua Activity.


NOTA: Al cambiar de AppCompatActivity (o una subclase, ActionBarActivity), a Activity, debe cambiar también las distintas llamadas con "soporte" a la correspondiente llamada sin "soporte". Así, en lugar de getSupportFragmentManager, llame a getFragmentManager.

Comentarios (25)

El sdk mínimo es 10. ActionBar está disponible a partir del nivel 11 de la api. Por lo tanto, para el 10 que estaría utilizando AppCompat de la biblioteca de apoyo para que usted necesita para utilizar Theme.AppCompat o descendiente de la misma.

Utilice

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

O si no quieres la barra de acción en la parte superior

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

Más información @

http://developer.android.com/guide/topics/ui/actionbar.html

Editar:

Puede que haya interpretado mal el post de la operación.

Parece que op quiere un diálogo con un tema de actividad. Así que como ya se sugiere por Bobbake4 extender Activity en lugar de ActionBarActivity.

También echa un vistazo a los atributos del diálogo en el siguiente enlace

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/

Comentarios (8)

NOTA: Tenía la intención de que esto fuera una respuesta, pero las pruebas posteriores revelan que sigue fallando cuando se construye usando maven desde la línea de comandos, así que he tenido que editarlo para que sea un problema! :-(

En mi caso cuando obtuve este error ya estaba usando un Tema AppCompat y el error no tenía mucho sentido.

Estaba en el proceso de mavenizar mi build de android. Ya tenía dependencias de las versiones apklib y jar de app compat, así:



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



            android.support
            compatibility-v7-appcompat
            jar



            android.support
            compatibility-v7
            jar



            android.support
            compatibility-v4

Ahora, cuando importo el proyecto de maven y construyo y ejecuto desde IntelliJ va bien.

Pero cuando construyo y despliego y ejecuto desde la línea de comandos con maven sigo obteniendo esta excepción.

Comentarios (0)