Java.lang.IllegalStateException Necesita utilizar un tema Theme.AppCompat (o descendente) con esta actividad

Saludos mis amigos desarrollador!

He creado una aplicación de demostración para probar el diseño de material para minSdk 14 y targetSdj 23. Tengo los siguientes archivos a continuación. Funciona muy bien debajo de la API 21. Creo que el culpable es Styles-v21.xml como la aplicación funcionó bien antes de eso.

Su una configuración simple, sólo una actividad. Estoy probando el tema Material y el tema AppCompat para trabajar con el siguiente escenario.

  1. Theme.AppCompat para API debajo de 21.
  2. Tema.Material para API 21 y 21+.

La aplicación funciona bien debajo de la API 21, pero por encima de 21+ la aplicación se bloquea diciendo: "Desafortunadamente, materialTest ha dejado de funcionar".

El error es el siguiente:

FATAL EXCEPTION: main Process: net.slidenerd.materialtest, PID: 28204 java.lang.RuntimeException: Unable to start activity ComponentInfo{net.slidenerd.materialtest/net.slidenerd.materialtest.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:340) at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:309) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:273) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) at net.slidenerd.materialtest.MainActivity.onCreate(MainActivity.java:12) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

MainActivity.java

 package net.slidenerd.materialtest; import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } 

Estilos.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources> 

Estilos-v21.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar"> <item name="android:colorPrimary">@color/colorPrimary</item> <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item> <item name="android:colorAccent">@color/colorAccent</item> </style> </resources> 

Manifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.slidenerd.materialtest"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:theme="@style/AppTheme" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Solución : Solucioné este problema extendiendo la actividad en vez de AppCompatActivity y la aplicación funciona muy bien tanto en API 14+ como en API 23 sin problemas. Pero, ¿podría usted justificar la solución preferida a este problema.

Todo el código necesario para producir el error está por encima.

Nota : Para producir el error, MainActivity debe extender AppCompatActivity y debe ejecutarse en API 21 o superior.

¿Podría alguien explicar el caso ideal que sucede aquí para comprender el problema subyacente?

¡Gracias!

Si su actividad se extiende desde AppCompatActivity es obligatorio que su tema de actividad debe ser Theme.AppCompat theme (or descendant) .

Si desea utilizar otro tema, no se extiende desde AppCompatActivity y dejará de recibir java.lang.IllegalStateException .

¡¡Espero que esto ayude!!

Se supone que AppCompatActivity se utiliza con otros componentes de la biblioteca Compat y esperan que haya definido algunos atributos en su tema (como android: colorPrimary, android: colorSecondary, etc.). Si estos atributos no están definidos en su tema, los componentes que los necesiten lanzarán una RuntimeException. Los temas Theme.AppCompat definen estos atributos.

En el camino inverso no hay ningún problema. Puede extenderse desde Actividad y utilizar un tema de Theme.AppCompat sin problemas, pero perderá alguna funcionalidad proporcionada por AppCompatActivity.

Por lo tanto, si desea utilizar AppCompatActivity, utilice un tema Theme.AppCompat o defina los atributos que requiere en su tema. Puede ir a la línea que lanza la excepción para ver qué atributo es necesario.

  • ¿Por qué no se muestra mi aplicación en Google Play? Ahora publicado
  • Barra de búsqueda personalizada tiene una brecha entre el pulgar y el progreso
  • Todos los iconos de ActionMode Bar no se muestran en Android?
  • ScrollView - ¿Cómo desplazarse hacia abajo mientras se diseña el diseño en Eclipse?
  • ¿Cómo puedo editar las dimensiones de un elemento de menú PopUp en Android?
  • Android arregla el diseño con la altura en porcentaje
  • Android estilo Recopilación de recursos (aapt) fallando: Tabla de recursos no válidos: tamaño de encabezado 0xc
  • KitKat specific- android.content.res.Resources $ NotFoundException: Archivo res / drawable / list_selector_white.xml de ID de recurso extraíble
  • ¿Cómo evitar las filtraciones de Eclipse en XServer al editar archivos XML de Android?
  • Android Studio - ¿Cómo se logró este truco de estructura de archivos de recursos?
  • Cómo conservar los nodos XML que no están enlazados a un objeto cuando se utiliza SAX para analizar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.