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


Answers

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

Question

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 elemento de manifiesto <activity> :

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

Sin embargo, cuando probé esto, recibí 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 superior a 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>

Crear un cuadro de diálogo como este era algo que estaba deseando hacer, ya que ya completé el diseño.

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




Esta solución funcionó para mí.

La biblioteca de diseño depende del Soporte v4 y de las Bibliotecas de soporte de AppCompat, por lo que no debe usar una versión diferente para el appcompat y la 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 lugar de

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



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

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>



para mí fue una 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;}

de Android - ¿Cómo crear FAB mediante programación?




Tuve tal caída en los dispositivos de Samsung a pesar de que la actividad usó 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"




También tuve este problema y lo que hice para solucionarlo Y TODAVÍA usar 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 tuvo 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 en el 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 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 vuelva a generar el proyecto.




ve a tus estilos y pon el padre

parent="Theme.AppCompat"

en lugar de

parent="@android:style/Theme.Holo.Light"



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 "IllegalStateException: debe utilizar un tema Theme.AppCompatpat (o descendiente) con esta actividad" error.




Cambia tu estilo de tema padre a

 parent="Theme.AppCompat"

Esto funcionó para mí ...




En mis experiencias, el problema fue el contexto en el que mostré mi diálogo. Dentro de un botón, haga clic en Instanciar un AlertDialog de esta manera:

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

Pero el contexto no era correcto y causó el error. Lo he cambiado usando el contexto de la aplicación de esta manera:

En la sección de declarar:

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 mí.




min sdk es 10. ActionBar está disponible desde el nivel 11 de api. Por lo tanto, para 10 AppCompat usando AppCompat desde la biblioteca de soporte para la que necesitas usar Theme.AppCompat o un descendiente de la misma.

Utilizar

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

Más información @

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

Editar:

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

Parece que op quiere un Diálogo con un Tema de Actividad. Entonces, como ya sugirió Bobbake4, amplíe Activity lugar de ActionBarActivity .

También tenga un aspecto @ Atributos del cuadro de 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/




Mi actividad con SectionsPagerAdapter y ViewPager & Fragment

public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
     @Override
        public void onPostResume(){
            super.onPostResume();
            try {
               getSupportActionBar().setDisplayShowTitleEnabled(false);
            }catch (NullPointerException ignored){
            }
        }



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

( Build -> Clean Project; Build -> Rebuild Project; Run -> Run )

Puede parecer tonto, ¡pero ahora funciona genial !

¡Solo espero que ayude!




Su actividad está extendiendo ActionBarActivity, que requiere la aplicación de AppCompat.theme . Cambiar de ActionBarActivity a Activity o FragmentActivity , resolverá el problema.

Si no usas ninguna barra de acción, entonces:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 



Para mí, ninguna de las respuestas anteriores funcionó incluso después de tener Theme.AppCompat como mi tema base para la aplicación. Estaba usando com.android.support:design:24.1.0 Así que acabo de cambiar la versión a 24.1.1 . Después de la sincronización gradle, se volvió a trabajar y la excepción desapareció. Me parece que el problema fue con algunas versiones anteriores de las bibliotecas de soporte de diseño.

Solo poniendo esto aquí en caso de que otras respuestas no funcionen para algunas personas.




Links