Pregunta Necesita usar 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 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 crea una actividad y establece su tema en Theme.Holo.Dialog en el <activity> elemento manifiesto:

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


770
2018-02-16 17:34


origen


Respuestas:


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

Actualizar: Extendiendo AppCompatActivity también tendría este problema

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


La regla general es que si desea que su código admita versiones anteriores de Android, debe tener el AppCompat tema y el código de Java debe extender AppCompatActivity. Si tiene * una actividad que no necesita este soporte, como que solo le interesan las últimas versiones y funciones de Android, puede aplicar cualquier tema, pero el código de Java debe extenderse de forma simple. Activity.


NOTA: cuando cambie de AppCompatActivity (o una subclase, ActionBarActivity), a Activity, también debe cambiar las varias llamadas con "soporte" a la llamada correspondiente sin "apoyo". Entonces, en lugar de getSupportFragmentManager, llamada getFragmentManager.


974
2018-02-16 17:48



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


463
2017-09-04 10:44



Copiando 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 ocurrió después de que agregué 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


164
2017-09-03 10:43



min sdk es 10. ActionBar está disponible desde el nivel 11 de la API. Entonces, para 10 estarías usando AppCompat desde la biblioteca de soporte para la que debe usar Theme.AppCompat o descendiente de lo mismo.

Utilizar

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

O si no quieres 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:

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

Parece que op quiere un Diálogo con un Tema de Actividad. Como ya lo sugirió Bobbake4, extienda Activity en 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/


82
2018-02-16 17:36



Esto funcionó para mí, acabo de cambiar:

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

a esto:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

61
2017-10-21 20:27



Estaba experimentando este problema a pesar de que mi Tema era un AppCompat Tema y mi actividad fue una 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; Ejecutar -> Ejecutar)

Puede parecer tonto, pero ahora es Funciona genial!

¡Solo espero que ayude!


30
2018-04-29 05:10



Esto es lo que me solucionó: en lugar de especificar el tema en manifiesto, lo definí en onCreate para 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);
...
}

aquí MyAppTheme es un descendiente de Theme.AppCompaty está definido en xml. Tenga en cuenta que el tema debe establecerse antes super.onCreate y setContentView.


22
2018-01-14 21:37



ve a tus estilos y pon el padre

parent="Theme.AppCompat"

en lugar de

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

17
2017-12-03 10:45



En mi caso, no tengo ningún archivo values-v21 en mi directorio res. Luego lo creé y agregué en él 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>

16
2018-06-23 09:04



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 luego obtendrás una "IllegalStateException: necesitas usar un tema (o descendiente) Theme.AppCompat con esta actividad".


13
2018-05-03 22:10