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();