Подтвердить что ты не робот

Фон стиля AppCompat, распространяемый на изображение в ToolBar

Контекст

Я использую новейший AppCompat v7 lib (21.0.0), и я перенес свое приложение из ActionBar в ToolBar

Проблема

  • Изображения в ToolBar автоматически получают тот же фон, что и ToolBar

В настоящее время SearchBox - это настраиваемый набор представлений на панели действий (из предыдущей реализации). Я планирую переключиться, если в SearchView и соответствующим образом начертить его, но меня все еще очень интересует проблема, с которой я сейчас сталкиваюсь.

Img background

  1. При длительном нажатии на элемент меню в ToolBar появляется тост с текстом подсказки, а текст имеет тот же фон, что и ToolBar.

Toast background

Как я могу избежать этого?

Вот мой макет панели инструментов и стиль и тема

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"/>

значения/styles.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>

Тема

<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>

Обходной путь 1 для проблемы 1

Обходной путь для первой проблемы - установить прозрачный фон в ImageView

android:background="@color/transparent"

Это не решает проблему с тостом.

Решение для обеих задач

Я устанавливаю фон в ToolBar

<?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"/>

И я больше не устанавливаю фон в теме.

<style name="MyActionBarStyle" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:windowActionBarOverlay">true</item>
    <!-- Support library compatibility -->
    <item name="windowActionBarOverlay">true</item>
</style>

Как указал Крис Банес, стиль может быть создан для панели инструментов вместо объявления андроида: фон.

Это исправляет мою проблему, но тогда у меня, похоже, есть еще одна проблема с тем, что popupTheme не применяется, а мой ShareActionMenuItem не имеет белого фона с черным текстом. См. Еще один вопрос: AppPompat ToolBar popupTheme не используется в элементе меню ShareAction

Возможно, это ошибка в библиотеке appcompat.

4b9b3361

Ответ 1

Нельзя использовать theme следующим образом:

  • style = local на панели инструментов
  • theme = global для всего, что завышено на панели инструментов

Обходной путь 2, как вы его называете, является правильным. Если вы хотите извлечь некоторые значения в стиль, вы можете сделать это так:

<android.support.v7.widget.Toolbar
    android:id="@+id/my_awesome_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    style="@style/MyDarkToolbar" />

Стиль:

<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>

Ответ 2

Никогда не используйте темы для редактирования. Потому что тема определяет общее поведение приложения. U может использовать два метода для этого

Метод: 1

U может напрямую указывать параметры в appbar.xml, как показано ниже

в 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"/>

Метод: 2

вы можете использовать стиль, предложенный Chris_Banes в вышеприведенном сообщении

в 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" />

в стиле:

<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>

Точки для заметок

С помощью новой панели инструментов вы можете применить стиль и тему. Они есть другой! Стиль является локальным для представления панели инструментов, например фоновый цвет. Приложение: тема вместо этого является глобальной для всех элементов ui завышенные на панели инструментов, например цвет названия и значков.