studio personalizar icono como color cambiar bar agregar android appcompat-v7-r22.1 android-appcompat

icono - personalizar navbar android studio



Debe usar un tema Theme.AppCompat(o descendiente) con esta actividad. Cambiar a Theme.AppCompat causa otro error (14)

Uso appcompat v22.1.0 en mi aplicación y uso la barra de herramientas. Todo estaba bien cuando uso Theme.AppCompat.Light.NoActionBar . Cuando comienzo a implementar AlertDialog , produce un error como este:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.support.v7.app.AppCompatDelegateImplBase.onCreate(AppCompatDelegateImplBase.java:113) at android.support.v7.app.AppCompatDelegateImplV7.onCreate(AppCompatDelegateImplV7.java:146) at android.support.v7.app.AppCompatDialog.<init>(AppCompatDialog.java:47) at android.support.v7.app.AlertDialog.<init>(AlertDialog.java:92) at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:882) at com.ramabmtr.map.findingmoo.MainActivity.onOptionsItemSelected(MainActivity.java:216) at android.app.Activity.onMenuItemSelected(Activity.java:2572) at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:353) at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:144) at android.support.v7.internal.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:99) at android.support.v7.internal.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:99) at android.support.v7.internal.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:74) at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:164) at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:740) at android.support.v7.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:802) at android.support.v7.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153) at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:949) at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:939) at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:598) at android.support.v7.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:139) at android.view.View.performClick(View.java:4084) at android.view.View$PerformClick.run(View.java:16989) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4812) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:559) at dalvik.system.NativeStart.main(Native Method)

Basado en ese error, cambio mi tema a Theme.AppCompat y pongo esto:

<item name="windowActionBar">false</item> <item name="windowNoTitle">true</item>

a mi tema Pero produce el mismo error.

Style.xml (antiguo)

<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> </style> </resources>

Style.xml (nuevo)

<resources> <style name="AppTheme" parent="Theme.AppCompat"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> </style> </resources>

¿¿Alguien sabe como arreglarlo??

MainActivity.java

package com.ramabmtr.map.findingmoo; import android.content.DialogInterface; import android.graphics.Typeface; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private Toolbar toolbar; private TextView toolbarTitle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/panpizza.ttf"); toolbarTitle = (TextView) findViewById(R.id.toolbar_title); toolbarTitle.setTypeface(myTypeface); AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext()); builder.setTitle(R.string.filter_title); builder.setMessage("test"); builder.setPositiveButton(R.string.ok_button, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); builder.setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); AlertDialog dialog = builder.create(); dialog.show(); } }


Agregando Android: theme = "@ style / Theme.AppCompat" como este en manifiesto

<activity android:theme="@style/Theme.AppCompat" android:name=".MainActivity"

resuelve el problema


Básicamente, su actividad está utilizando la barra de herramientas (que reemplaza a la barra de acción), por lo que debe usar el estilo para la actividad que no tiene barra de acción como Theme.AppCompat.Light.NoActionBar . Si tiene su propio estilo para el diálogo, entonces necesita heredar el tema apropiado de AppCompat.

<style name="myDialog" parent="Theme.AppCompat.Dialog"> <item name="android:windowNoTitle">true</item> ... </style>

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.myDialog));


En kotlin esto me funcionó:

val dialog = AlertDialog.Builder(this)


En mi caso, este bloqueo se debió a que estaba pasando View.getContext().getApplicationContext() como Context al Builder . Esto se solucionó usando getActivity() lugar.


En mi caso, tuve que verificar y asegurarme de que todos los archivos Theme.AppCompat usen Theme.AppCompat . El archivo de styles.xml estándar tenía ese tema pero también había estilos (v21) .xml, styles (v11) .xml y styles (sw600dp) .xml que se generaron automáticamente. La solución simple sería copiar y pegar el estilo AppTheme predeterminado personalizado en estas carpetas.

¡Todo lo mejor!


En su lugar, debe pasar el contexto de su Actividad para pasar su Contexto. Intente con "este" en lugar de "contexto". Este trabajo para mi


Este trabajo para mí ... después de leer varias respuestas fue ...

Cambiar mi importación de esta manera:

import android.app.AlertDialog;

en vez de

import android.support.v7.app.AlertDialog;

esto da error No se puede agregar la ventana: el token nulo no es para una aplicación ... así que cambio el contexto del generador de

AlertDialog.Builder builder = new

AlertDialog.Builder (getAplicationContext ()); a

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


La sonda se debe al contexto que está pasando para construir el cuadro de diálogo de alerta. No use getApplicationContext (). Intente usar su contexto de actividad. Utilice AlertDialog.Builder AlertDialog.Builder builder = new AlertDialog.Builder(MainActiviy.this);


Si está utilizando la biblioteca de soporte, su actividad extiende AppCompactActivity , si usa android studio para crear actividad, esto es predeterminado. En tal caso, pase el contexto al constructor como ActivityName.this o simplemente this si lo está pasando en onCreate , pasar getApplicationContext() no funcionará.

Este es mi estilo usando appcompact

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:textSize">18sp</item> </style> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>

Y todo funciona bien cuando uso this o ActivityName.this this como se mencionó anteriormente.

Si está utilizando un fragmento, debe pasar getActivity() como contexto al generador en lugar de getContext() .


Si tiene este error al crear un diálogo (solo en mi caso) , debe usar lo siguiente :

AlertDialog.Builder dialog = new AlertDialog.Builder(context, R.style.Theme_AppCompat_Light);

en vez de:

AlertDialog.Builder dialog = new AlertDialog.Builder(context);

Esto me funcionó perfectamente!


Solucioné mi problema usando MainActivity.this (o YourActivityName.this)

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);

Asegúrese de tener ya Theme.AppCompat y extender AppCompatActivity.


Tenga cuidado con tal problema, he renunciado a largas y largas horas con ese error. sucede solo en la versión de Android 4.4.2, a pesar de que estoy usando el tema de Appcompat en todas partes, intenté jugar con todos los estilos y usar muchos otros hilos y respuestas.

El problema fue causado por esta línea:

<style name="LooperLabTheme" parent.theme="@style/Theme.AppCompat.Light.NoActionBar" theme="@style/Theme.AppCompat.Light.NoActionBar"> <style/>

tenga en cuenta el "parent.theme", lo he copiado de alguna respuesta en los primeros días del lanzamiento del proyecto en el que estoy trabajando, debería ser "parent" sin el tema.

<style name="LooperLabTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" theme="@style/Theme.AppCompat.Light.NoActionBar"> <style/>

Solo quiero ayudar a otros que corren de hilo en hilo para encontrar la solución a su problema muy específico, puede ser el mismo que el mío, ahorre tiempo.


Vio esta misma excepción usando el tema Activity y Tema. Mi problema era una importación incorrecta, estaba usando el soporte. import android.support.v7.app.AlertDialog; en lugar de import android.app.AlertDialog;


getSupportActionBar().getThemedContext() AlertDialog.Builder builder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { builder = new AlertDialog.Builder(getSupportActionBar().getThemedContext(), android.R.style.Theme_Material_Dialog_Alert); } else { builder = new AlertDialog.Builder(getSupportActionBar().getThemedContext()); } builder.setTitle("Alert Dialog") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }) .setIcon(android.R.drawable.ic_dialog_alert) .show();