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

1050
ant2009 2014-02-17 07:34.

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

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

Sin embargo, cuando probé esto, obtengo 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 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>

La creación del 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?

30 answers

1141
Bobbake4 2014-02-17 07:48.

La razón por la que tiene este problema es porque la actividad a la que está tratando de aplicar el tema del diálogo se está extendiendo, lo ActionBarActivityque 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 como está, un Theme.AppCompatvalor sin valor


La regla general es que si desea que su código sea compatible con 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, como que solo le interesan las últimas versiones y características de Android, puede aplicarle cualquier tema, pero el código Java debe extenderse a la versión anterior Activity.


NOTA: Cuando se cambia 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 getSupportFragmentManager, llame getFragmentManager.

555
iusting 2014-09-05 00:44.

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

284
A.K. 2015-09-04 00:43.

Copiando la respuesta de @MarkKeen en los comentarios anteriores, ya que tuve el mismo problema.

Tuve el error indicado en la parte superior de la publicación y sucedió 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.

116
Darush 2016-10-22 10:27.

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);
114
Raghunandan 2014-02-17 07:36.

min sdk es 10. ActionBarestá disponible desde el nivel 11 de la api. Por lo tanto, para 10, usaría AppCompatla biblioteca de soporte para la que necesita usar Theme.AppCompato un descendiente de la misma.

Utilizar

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

O si no quieres la barra de acciones en la parte superior

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

Más información @

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

Editar:

Podría haber leído mal la publicación de operaciones.

Parece que op quiere un diálogo con un tema de actividad. Entonces, como ya sugirió Bobbake4, extender en Activitylugar de ActionBarActivity.

También eche un vistazo a los atributos de diálogo @ en el enlace de abajo

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

48
Geraldo Neto 2016-04-29 19:10.

Estaba experimentando este problema a pesar de que mi tema era un AppCompattema y mi actividad era un AppCompatActivity(o Activity, como se sugiere en las respuestas de otros). Así que limpié, reconstruí y volví a ejecutar el proyecto.

( Construir -> Proyecto limpio; Construir -> Reconstruir proyecto; Ejecutar -> Ejecutar )

Puede parecer tonto, ¡pero ahora funciona muy bien !

¡Solo espero que te ayude!

27
k29 2015-01-15 11:37.

Esto es lo que me solucionó: en lugar de especificar el tema en el manifiesto, lo definí onCreatepara cada actividad que se extiende ActionBarActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

Este MyAppThemees un descendiente de Theme.AppCompaty está definido en xml. Tenga en cuenta que el tema debe establecerse antes super.onCreatey setContentView.

23
Yamen Nassif 2014-12-04 00:45.

ve a tus estilos y pon el padre

parent="Theme.AppCompat"

en vez de

parent="@android:style/Theme.Holo.Light"
17
sharma_kunal 2016-10-01 18:26.

Cambie el tema de la actividad deseada. Esto funciona para mi:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />
16
Ali Gürelli 2016-06-23 23:04.

En mi caso, no tengo ningún archivo de valores-v21 en mi directorio res. Luego lo creé y agregué los siguientes códigos:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
14
goRGon 2015-04-29 14:08.

Tuve tal bloqueo en los dispositivos Samsung a pesar de que la actividad usaba Theme.AppCompat . La causa raíz estaba relacionada con optimizaciones extrañas en el lado de Samsung:

- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme

Mi solución fue simplemente eliminar android:launchMode="singleTask"

14
Ali Akram 2018-06-28 00:37.

Solo haz

new AlertDialog.Builder(this)

En vez de

new AlertDialog.Builder(getApplicationContext())
13
JonasOliveira 2015-05-04 12:10.

Si necesita extender ActionBarActivity, necesita en su style.xml:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

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

Si establece como tema principal de su aplicación como android: Theme.Material.Light en lugar de AppTheme.Base , obtendrá un error "IllegalStateException: necesita usar un tema Theme.AppCompat (o descendiente) con esta actividad".

12
Marc Baduq 2016-03-09 05:30.

Tuve el mismo problema, pero se resolvió cuando puse esto en el manifiesto: android: theme = "@ style / Theme.AppCompat.

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name_test"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat">

        ...    

    </application>
10
Vitaliy A 2018-07-29 08:50.

En mi caso, este problema apareció cuando intenté mostrar el diálogo. El problema estaba en el contexto, utilicé getBaseContext () que teóricamente debería devolver el contexto de la actividad, pero parece que no lo es, o devuelve el contexto antes de que se aplicara cualquier tema.

Así que reemplacé getBaseContexts () con " this ", y ahora funciona como se esperaba.

        Dialog.showAlert(this, title, message,....);
9
Elyas Nategh 2018-09-15 06:20.

Tuve una actividad con el tema <android:theme="@android:style/Theme.Dialog">utilizado para mostrar el diálogo en mi appWidget y tuve el mismo problema

Resolví este error cambiando el código de actividad como se muestra a continuación:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}
8
Peter 2016-09-21 21:54.

para mí fue la solución para usar ContextThemeWrapper:

private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}

desde Android: ¿Cómo crear FAB mediante programación?

8
Shivam Dawar 2019-10-08 07:07.

Asegúrese de estar utilizando un contexto de actividad mientras crea un nuevo Diálogo de alerta y no una aplicación o contexto base.

7
danigonlinea 2014-11-28 00:11.

Ha llegado a esto porque desea aplicar Material Design en su estilo de tema en versiones anteriores de sdk a 21. ActionBarActivityrequiere, AppThemepor lo que si también desea evitar su propia personalización sobre su AppTheme, solo tiene que cambiar en su styles.xml (anterior a sdk 21) para que de esta manera se pueda heredar para un tema de compatibilidad de aplicaciones.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

para esto:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
7
Wraithious 2017-10-28 07:58.

También tuve este problema y lo que hice para solucionarlo, Y todavía uso el tema Holo fue seguir estos pasos:

primero reemplacé esta importación:

import android.support.v7.app.AppCompatActivity;

Con este:

import android.app.Activity;

luego cambié mi extensión de:

public class MyClass extends AppCompatActivity {//...

a esto:

public class MyClass extends Activity {//...

Y también tuve que cambiar esta importación:

import android.support.v7.app.AlertDialog;

a esta importación:

import android.app.AlertDialog;

y luego puedes usar tu etiqueta de tema en el manifiesto a nivel de actividad:

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

y por último, (a menos que tenga otras clases en su proyecto que tengan que usar v7 appCompat) puede limpiar y reconstruir su proyecto o eliminar esta entrada en el archivo de compilación de gradle a nivel de la aplicación:

compile 'com.android.support:appcompat-v7:23.2.1'

si tiene otras clases en su proyecto que tienen que usar v7 appCompat, simplemente limpie y reconstruya el proyecto.

6
Fazal 2015-02-02 08:32.

Cambie el estilo de su tema principal a

 parent="Theme.AppCompat"

Esto funcionó para mí ...

6
Kaloglu 2015-06-16 03:50.

Tienes muchas soluciones a ese error.

  1. Debe usar Activity o FragmentActivity en lugar de ActionbarActivity o AppCompatActivity

  2. Si desea usar ActionbarActivity o AppCompatActivity , debe cambiar en styles.xml Theme.Holo.xxxx a Theme.AppCompat.Light (si es necesario, agregue a DarkActionbar )

Si no necesita atributos avanzados sobre la barra de acción o AppCompat , no necesita usar la barra de acción o AppCompat .

6
shikha 2016-02-09 20:09.

En el manifiesto de Android, simplemente cambie el tema de la actividad a AppTheme como sigue el fragmento de código

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>
6
Avinash_ks 2017-03-20 20:21.

Aquí es cuando desea un AlertDialog en un fragmento

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();
6
Dante 2018-01-30 02:12.

En mis experiencias, el problema era el contexto en el que mostraba mi diálogo. Dentro de un botón, hago clic en instanciar un AlertDialog de esta manera:

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

Pero el contexto no era correcto y provocó el error. Lo cambié usando el contexto de la aplicación de esta manera:

En declarar sección:

Context mContext;

en el método onCreate

mContext = this;

Y finalmente en el código donde necesito el AlertDialog:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

Esta es la solución para mi.

6
Azhar osws 2017-11-18 21:34.

Estaba teniendo el mismo problema. Porque estaba creando un cajón de navegación personalizado. Pero me olvido de mencionar el tema en mi manifiesto como este

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

Tan pronto como agregué el tema anterior a mi manifiesto, resolvió el problema.

5
user1501382 2015-04-18 20:55.

Este funcionó para mí:

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>
5
Md Imran Choudhury 2015-04-21 10:03.

Su actividad está extendiendo ActionBarActivity, lo que requiere que se aplique AppCompat.theme . Cambie de ActionBarActivity a Activity o FragmentActivity , resolverá el problema.

Si no usa la barra de acción, entonces:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 
4
Kaloglu 2017-10-23 02:57.

Solución rápida.

Cambie el padre de su tema base en styles.xml

Reemplazar de

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

a

<style name="AppTheme" parent="Theme.AppCompat">
3
kiran boghra 2016-08-04 01:58.

Esta solución funcionó para mí.

La biblioteca de diseño depende de Support v4 y AppCompat Support Libraries, por lo que no use una versión diferente para appcompat y biblioteca de diseño en gradle.

utilizar

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.0.0'

en vez de

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'

Related questions

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Se revela la estatua de Godzilla más nueva de Tokio

Se revela la estatua de Godzilla más nueva de Tokio

Anteriormente, Kotaku informó que un hotel Godzilla se estaba abriendo en Tokio este abril. Junto al hotel, estaba programada la aparición de una enorme cabeza de 'Zilla, pero todo lo que hemos visto fueron imágenes conceptuales computarizadas.

El alcalde de Chicago realmente quiere que Elon Musk perfore un túnel debajo de la ciudad

El alcalde de Chicago realmente quiere que Elon Musk perfore un túnel debajo de la ciudad

Foto: Getty Desde que lanzó The Boring Company hace un año, Elon Musk ha mencionado varios sitios de construcción posibles para el negocio de perforación de túneles y ha descartado una vaga referencia a una aprobación gubernamental "verbal" para un túnel Hyperloop que conecta la ciudad de Nueva York y Washington. , CC. Pero ahora sabemos que al menos un alcalde quiere que Musk perfore un agujero debajo de su ciudad.

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.

Cuéntanos tus mejores trucos de Washington, DC

Cuéntanos tus mejores trucos de Washington, DC

Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.

India me está pateando el culo

India me está pateando el culo

Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Language