android - try - failed to load appcompat actionbar with unknown error. solucion
Fondo de estilo de AppCompat propagado a la imagen dentro de la barra de herramientas (2)
No deberías usar un theme
así:
- style = local to the Toolbar
- tema = global a todo lo inflado en la barra de herramientas
La solución 2, como la llaman, es la forma correcta. Si desea extraer algunos valores en un estilo, puede hacerlo así:
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/MyDarkToolbar" />
Estilo:
<style name="MyDarkToolbarStyle" parent="Widget.AppCompat.Toolbar">
<item name="android:background">@color/green</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>
Contexto
Estoy usando la última versión de AppCompat v7 lib (21.0.0) y he migrado mi aplicación de ActionBar a ToolBar
Problema
- Las imágenes en la barra de herramientas reciben automáticamente el mismo fondo que la barra de herramientas.
Actualmente, el SearchBox es un conjunto de vistas personalizado en la barra de acción (de la implementación anterior) planeo cambiar a SearchView y diseñarlo en consecuencia, pero todavía estoy muy interesado en el problema al que me enfrento ahora.
- Cuando se presiona prolongadamente un elemento del menú en la barra de herramientas, aparece una tostada con el texto de sugerencia y el texto tiene el mismo fondo que la barra de herramientas.
¿Cómo puedo evitar esto?
Aquí está mi diseño de barra de herramientas y el estilo y tema
layout v_toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_awesome_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/MyActionBarStyle"/>
valores / estilos.xml
<style name="MyActionBarStyle" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:background">@color/green</item>
<item name="android:windowActionBarOverlay">true</item>
<!-- Support library compatibility -->
<item name="background">@color/green</item>
<item name="windowActionBarOverlay">true</item>
</style>
Tema
<style name="MyTheme" parent="AppBaseTheme">
<!-- Here we setting appcompat’s actionBarStyle -->
<!-- <item name="actionBarStyle">@style/MyActionBarStyle</item> -->
<item name="windowActionBar">false</item>
<!-- ...and here we setting appcompat’s color theming attrs -->
<item name="colorPrimary">@color/green</item>
<item name="colorPrimaryDark">@color/green_dark</item>
</style>
Solución 1 para el problema 1
La solución para el primer problema es establecer un fondo transparente en el ImageView
android:background="@color/transparent"
Esto no resuelve el problema de las tostadas.
Solución para ambos problemas.
Puse un fondo a la barra de herramientas
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_awesome_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/green"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/MyActionBarStyle"/>
Y ya no estoy estableciendo el fondo sobre el tema.
<style name="MyActionBarStyle" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:windowActionBarOverlay">true</item>
<!-- Support library compatibility -->
<item name="windowActionBarOverlay">true</item>
</style>
Como señaló Chris Banes, se podría crear un estilo para la barra de herramientas en lugar de declarar el android: fondo.
Esto soluciona mi problema, pero luego parece que tengo otro problema con el hecho de que el popupTheme no se aplica y mi menú desplegable ShareActionMenuItem no tiene un fondo blanco con texto negro. Vea otra pregunta aquí: AppCompat ToolBar popupTheme no se utiliza en el elemento de menú ShareAction
Tal vez esto es un error en la biblioteca de appcompat.
Nunca uses temas para editar. Porque el tema define el comportamiento general de la aplicación. U puede usar dos métodos para eso
Método 1
U puede especificar directamente los parámetros en appbar.xml como se muestra a continuación
en appbar.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/green"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme=">style/ThemeOverlay.AppCompat.Light"/>
Método: 2
Puedes usar un estilo como Chris_Banes sugirió en la publicación anterior
en appbar.xml:
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/MyDarkToolbar" />
en estilo:
<style name="MyDarkToolbarStyle" parent="Widget.AppCompat.Toolbar">
<item name="android:background">@color/green</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>
Puntos a tener en cuenta
Con la nueva barra de herramientas puedes aplicar un estilo y un tema. ¡Ellos son diferentes! El estilo es local a la vista de la barra de herramientas, por ejemplo, el color de fondo. En su lugar, la aplicación: tema es global para todos los elementos de la interfaz de usuario inflados en la barra de herramientas, por ejemplo, el color del título y los iconos.