android - studio - ActionBarCompat: java.lang.IllegalStateException: necesita utilizar un Theme.AppCompat
toolbar android example (13)
Mi manifiesto no hace referencia a ningún tema ... no debería tener que AFAIK
Claro que sí. Nada va a aplicar mágicamente Theme.Styled
. Theme.Styled
a una actividad. Debes declarar que tus actividades, o toda tu aplicación, están usando Theme.Styled
, por ejemplo Theme.Styled
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Styled">
Estoy obteniendo una RuntimeException en Android 2.3.5 pero estoy usando Theme.AppCompat (res / values / themes.xml). Este es el teléfono: http://www.gsmarena.com/samsung_galaxy_y_s5360-4117.php
<!-- res/values/themes.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Styled" parent="@style/Theme.AppCompat">
<item name="actionBarStyle">@style/QueryActionBar</item>
<item name="android:actionBarStyle">@style/QueryActionBar</item>
</style>
<style name="QueryActionBar" parent="@style/Widget.AppCompat.ActionBar">
<item name="background">@color/blueback</item>
<item name="android:background">@color/blueback</item>
<item name="backgroundSplit">@color/blueback</item>
<item name="android:backgroundSplit">@color/blueback</item>
</style>
</resources>
Aquí está el archivo de valores-v11.
<!-- res/values-v11/themes.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="QueryTheme" parent="@android:style/Theme.Holo">
<!-- Any customizations for your app running on devices with Theme.Holo here -->
</style>
</resources>
Aquí está el error
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.txt2lrn.www/com.txt2lrn.www.LandingActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:102)
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
at com.txt2lrn.www.LandingActivity.onCreate(LandingActivity.java:95)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
... 11 more
Lo siento amigos, también tengo Android: theme = "@ style / Theme.Styled" definido en AndroidManifest.xml.
Acabo de mover mi aplicación de ActionBarSherlock a ActionBarCompat. Intenta declarar tu viejo tema así:
<style name="Theme.Event" parent="Theme.AppCompat">
Luego configura el tema en tu AndroidManifest.xml:
<application
android:debuggable="true"
android:name=".activity.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Event.Home"
>
Compruebe y asegúrese de no tener otra carpeta de valores que haga referencia a theme.styled y no use el tema AppCompat
es decir values-v11
carpeta values-v11
Encontré este error cuando intentaba crear un DialogBox cuando se realizaba alguna acción dentro de la clase CustomAdapter. Esto no era una actividad, sino una clase de adaptador. Después de 36 horas de esfuerzos y buscar soluciones, se me ocurrió esto.
Envíe la Actividad como parámetro mientras llama al CustomAdapter.
CustomAdapter ca = new CustomAdapter(MyActivity.this,getApplicationContext(),records);
Defina las variables en el Adaptador personalizado.
Activity parentActivity;
Context context;
Llame al constructor de esta manera.
public CustomAdapter(Activity parentActivity,Context context,List<Record> records){
this.parentActivity=parentActivity;
this.context=context;
this.records=records;
}
Y finalmente, al crear el cuadro de diálogo dentro de la clase de adaptador, hazlo así.
AlertDialog ad = new AlertDialog.Builder(parentActivity).setTitle("Your title");
and so on..
Espero que esto te ayude
Para agregar simplemente el soporte de ActionBar, su actividad o aplicación debe usar el tema @ style / Theme.AppCompat en AndroidManifest.xml de la siguiente manera:
<activity
...
android:theme="@style/Theme.AppCompat" />
Esto agregará la barra de acciones en la actividad (o todas las actividades si agregaste este tema a la aplicación)
Pero generalmente necesitas personalizar tu barra de acciones. Para hacer esto, necesita crear dos estilos con el padre de Theme.AppCompat, por ejemplo, "@ style / Theme.AppCompat.Light". El primero será para api 11> = (versiones de Android con compilación en la barra de acciones de Android), el segundo para api 7-10 (sin compilación en la barra de acciones).
Veamos el primer estilo. Se ubicará en res / values-v11 / styles.xml . Se verá así:
<style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
<!-- Setting values in the android namespace affects API levels 11+ -->
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<!-- Setting values in the android namespace affects API levels 11+ -->
<item name="android:background">@drawable/ab_custom_solid_styled</item>
<item name="android:backgroundStacked"
>@drawable/ab_custom_stacked_solid_styled</item>
<item name="android:backgroundSplit"
>@drawable/ab_custom_bottom_solid_styled</item>
</style>
Y debes tener el mismo estilo para la api 7-10. Se ubicará en res / values / styles.xml , PERO debido a que los niveles de API todavía no conocen los elementos de estilo originales de la barra de acción de Android, debemos usar uno, proporcionado por la biblioteca de soporte. Los elementos de Compatibilidad de ActionBar se definen como el original de Android, pero sin la parte "android:" en el frente:
<style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
<!-- Setting values in the default namespace affects API levels 7-11 -->
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<!-- Setting values in the default namespace affects API levels 7-11 -->
<item name="background">@drawable/ab_custom_solid_styled</item>
<item name="backgroundStacked">@drawable/ab_custom_stacked_solid_styled</item>
<item name="backgroundSplit">@drawable/ab_custom_bottom_solid_styled</item>
</style>
Marque eso, incluso si los niveles de API superiores a 10 ya tienen barra de acciones, debería seguir utilizando los estilos de AppCompat. Si no lo hace, tendrá este error al iniciar Acitvity en dispositivos con Android 3.0 y superior:
java.lang.IllegalStateException: necesita utilizar un tema Theme.AppCompat (o descendiente) con esta actividad.
Aquí está el enlace de este artículo original http://android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html escrito por Chris Banes.
PD Lo siento por mi inglés
Para mi vista de lista estoy usando Adaptador personalizado que extiende ArrayAdapter. en listiview tengo 2 botones uno de los botones como Custom AlertDialogBox. Ej: Actividad parentActivity; Constructor para Adaptador `
public CustomAdapter(ArrayList<Contact> data, Activity parentActivity,Context context) {
super(context,R.layout.listdummy,data);
this.mContext = context;
this.parentActivity = parentActivity;
}
`llamando a Adapter desde MainActivty
adapter = new CustomAdapter(dataModels,MainActivity.this,this);
ahora escribe tu diálogo de alerta dentro del botón ur que está en la clase Adaptador
viewHolder.update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(parentActivity);
alertDialog.setTitle("Updating");
alertDialog.setCancelable(false);
LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@SuppressLint("InflateParams") final View view1 = layoutInflater.inflate(R.layout.dialog,null);
alertDialog.setView(view1);
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
alertDialog.setPositiveButton("Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//ur logic
}
}
});
alertDialog.create().show();
}
});
Prueba esto...
styles.xml
<resources>
<style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat.Light">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
AndroidManifest.xml
<activity
android:name="com.example.Home"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Si está extendiendo ActionBarActivity en su MainActivity, tendrá que cambiar el tema principal también en values-v11.
Entonces el estilo.xml en values-v11 será -
<!-- res/values-v11/themes.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="QueryTheme" parent="@style/Theme.AppCompat">
<!-- Any customizations for your app running on devices with Theme.Holo here -->
</style>
</resources>
EDITAR: Le recomendaría que deje de usar ActionBar y comience a utilizar el diseño de AppBar incluido en la Biblioteca de soporte de diseño de Android
Solo hazlo Build -> Clean Project. Creo que esto resolverá tu problema.
Su Activity
está extendiendo ActionBarActivity
que requiere la AppCompat.theme
de AppCompat.theme
. Cambiar de ActionBarActivity
a Activity
o FragmentActivity
, resolverá el problema.
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"
en mi caso, hice una vista personalizada que agregué al constructor de vista personalizada
new RoomView(getAplicationContext());
el contexto correcto es actividad así que lo cambié a:
new RoomView(getActivity());
o
new RoomView(this);
para resolver o meu problema, eu apenas adicionei na minha MainActivity ("Tema = Para resolver mi problema, acabo de agregarlo en mi MainActivity (" Theme = "@ style / MyTheme" ") donde MyTheme es el nombre de mi tema
[Activity(Label = "Name Label", MainLauncher = true, Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleTop, Theme = "@style/MyTheme")]