Necesitas usar un tema Theme.AppCompat (o descendiente) con esta actividad

Resuelto ant2009 asked hace 54 años • 67 respuestas

Estudio Android 0.4.5

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

Si desea un cuadro de diálogo personalizado, puede mostrar una actividad como un cuadro de diálogo en lugar de utilizar las API de cuadro de diálogo. Simplemente cree una actividad y establezca su tema en Theme.Holo.Dialog en el <activity>elemento manifiesto:

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

Sin embargo, cuando intenté 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 mínimo:

minSdkVersion 10
targetSdkVersion 19

En mis estilos tengo los siguientes:

<!-- 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 un cuadro de diálogo como este era algo que esperaba hacer, ya que ya completé el diseño.

¿Alguien puede decirme cómo puedo solucionar este problema?

ant2009 avatar Jan 01 '70 08:01 ant2009
Aceptado

La razón por la que tiene este problema es porque la actividad a la que intenta aplicar el tema del diálogo se está extendiendo, ActionBarActivitylo que requiere AppCompatque se aplique el tema.

Actualización : la extensión AppCompatActivitytambién tendría este problema

En este caso, cambie la herencia de Java de ActionBarActivitya Activityy deje el tema del diálogo en el manifiesto tal como está, sin Theme.AppCompatvalor.


La regla general es que si desea que su código admita versiones anteriores de Android, debe tener el AppCompattema y el código Java debe extenderse AppCompatActivity. Si tiene *una actividad que no necesita este soporte, por ejemplo, si solo le interesan las últimas versiones y funciones de Android, puede aplicarle cualquier tema, pero el código Java debe extenderse al antiguo Activity.


NOTA: Al cambiar de AppCompatActivity(o una subclase, ActionBarActivity), a Activity, también se deben cambiar las distintas llamadas con "soporte" a la llamada correspondiente sin "soporte". Entonces, en lugar de getSupportFragmentManagerllamar a getFragmentManager.

Bobbake4 avatar Feb 16 '2014 17:02 Bobbake4

Todo lo que necesita hacer es agregar android:theme="@style/Theme.AppCompat.Light"la etiqueta de su aplicación en el AndroidManifest.xmlarchivo.

iusting avatar Sep 04 '2014 10:09 iusting

Copiando la respuesta de @MarkKeen en los comentarios anteriores porque tuve el mismo problema.

El error se indica en la parte superior de la publicación y ocurrió después de agregar un cuadro de diálogo de alerta. Tengo toda la información de estilo relevante en el manifiesto. Mi problema se solucionó cambiando una referencia de contexto en el generador de alertas. Cambié:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

a:

new android.support.v7.app.AlertDialog.Builder(this)

Y no más problemas.

A.K. avatar Sep 03 '2015 10:09 A.K.

Si está utilizando el contexto de la aplicación, así:

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

cámbielo a un contexto de actividad como este:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
Darush avatar Oct 21 '2016 20:10 Darush