Удалите дополнительный цвет фона фона из меню переполнения меню ввода / выхода?

Когда я открываю меню переполнения в своем приложении, я вижу сплошной прямоугольник цвета фона меню, отображаемый за самим меню во время анимации ввода / выхода. Вот анимация, показывающая это (с замедлением до 75%):

Наличие этого постороннего цветного прямоугольника портит приятные анимации ввода / выхода! Как я могу удалить его, сохраняя при этом все остальные стили Toolbar ?


Исследование

Я прочитал кучу ответов на стиль Toolbar на SO и собственные записи Криса Банеса по этому вопросу. Похоже, что использование тегов style / theme на основе per- View изменилось за последние пару лет, что затруднило найти определенную информацию в любом месте.

Я воспроизвел это с использованием версий с 22.1.0 по 23.2.0 (включительно) из библиотеки поддержки.


Файлы приложений

styles.xml

 <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="ToolbarStyle" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:background">@color/colorPrimary</item> </style> </resources> 

activity_main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:style="@style/ToolbarStyle" /> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 

Анализ времени выполнения

Как предположил @Commonsware, я взглянул на иерархию представлений во время выполнения. Редактирование результатов:

Меню рухнуло (присутствует кнопка переполнения, нет таинственного дополнительного прямоугольника):

Просмотр иерархической диаграммы при свертывании меню

Меню расширено (просмотры меню переполнения отображаются в отдельном Window ):

Просмотр иерархической диаграммы при расширении меню

Основная иерархия представления приложения (как показано в исходном Window ) не изменяется при сравнении двух состояний (устойчивых) меню. Поэтому я предполагаю, что дополнительный прямоугольник временно добавляется в окно основного приложения во время анимации меню и сразу же удаляется после их завершения. Я не уверен, почему это будет сделано – возможно, это похмелье из более старого (и теперь неиспользуемого) метода показа и скрытия меню переполнения? Если мой вывод правильный, то этот вопрос можно решить, если мы сможем определить, как предотвратить это преходящее поведение …

Выдержка из ответа Криса Бэна на вопрос о стиле стиля AppCompat, распространяемого на изображение в ToolBar

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

На основании вышеприведенного сообщения кажется, что атрибут android:background вы устанавливаете в android:theme является причиной дополнительного цвета фона во время анимации.

Я бы установил background на toolbar напрямую и использовал атрибут android:colorBackground для установки цвета фона для всплывающего окна. Кажется, что анимация работает нормально.

Код:

activity_main.xml

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorPrimary" android:theme="@style/CustomToolbarTheme" /> 

styles.xml

 <style name="CustomToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:colorBackground">@color/colorPrimary</item> <item name="android:textColorPrimary">@android:color/white</item> </style> 
Intereting Posts
В андроиде я могу создать разные фрагменты / действия в каждой вкладке, которые сохраняются во вкладках? Предотвращение растягивания фонового изображения Существует ли API Android для того, чтобы получить нажатую / выбранную цветовую кнопку по умолчанию? Как закрыть приложение Android на onBackPressed? ListSelector применяется ко всему списку Надпись TextInputLayout до уровня выше левого рисунка EditText Ссылка на Apple Wallet или Android Pay из веб-приложения MVC Не удалось переопределить onCreateOptionsMenu в ListFragment Android 4.4.2 обратный привязку к MacBook Air через Bluetooth PAN – не подключение к Интернету (Javascript) window.onblur и window.onfocus не работают на мобильном устройстве Android Странные проблемы заикания, от которых я не могу избавиться (включая полный источник) Java.lang.RuntimeException: Не удается получить информацию о камере Удалите все неиспользуемые ресурсы из проекта Android Динамическое изменение количества столбцов GridLayoutManager Понимание аннотации @SuppressLint («NewApi»)