Основной цвет (иногда) становится прозрачным

Я разрабатываю с использованием последней версии SDK (API 21) и библиотеки поддержки 21.0.2, и у меня возникли проблемы при попытке реализовать новые рекомендации по материальному дизайну.

Материальный дизайн говорит, что мне нужно иметь мои primary color и мои accent color и применить их к моему приложению. Но иногда, когда я открываю приложение, primary color становится прозрачным в некоторых виджетах, он возвращается в нормальное состояние, пока я не закрою приложение (с помощью кнопки «Назад») и не запущу его снова.

Вот пример прозрачности primary color на моей панели инструментов.

введите описание изображения здесь

Я использую Teal 500 в качестве основного цвета, и, как видите, он прозрачен только в android.support.v7.widget.Toolbar. Это также происходит с моим Navigation Drawer и (иногда, иногда нет) с другими случайными виджетами.

Это моя панель инструментов

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/primary"
        android:minHeight="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" >

Я пробовал с @color/primary и ?attr/colorPrimary безуспешно.

Вот мой Theme (не знаю, связано ли это, но на всякий случай):

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>     
    <item name="colorAccent">@color/accent</item>
    <item name="colorAccent">@color/accent</item>
    <item name="android:textColorPrimary">#fff</item>

    <item name="windowActionModeOverlay">true</item>
    <item name="android:textViewStyle">@style/Widget.TextView.White</item>
</style>

Так бывает только с primary color, accent color отлично работает. На моем устройстве установлена ​​версия 4.2.2, и я не проверял другие устройства.

Действия с панелью инструментов

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <android.support.v7.widget.Toolbar
            android:id="@+id/my_awesome_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:ignore="MergeRootFrame" />
    </LinearLayout>

    <!-- The navigation drawer -->

    <LinearLayout
        android:id="@+id/navdrawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:orientation="vertical" >

        <!-- IN THIS IT ALSO HAPPENS -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:paddingBottom="16dp"
            android:orientation="vertical"
            android:background="@color/primary" >

            <!-- Some stuff -->

        </LinearLayout>

        <ListView
            android:id="@+id/left_drawer"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:background="@color/black_light"
            android:divider="@color/grey"
            android:choiceMode="singleChoice" />
    </LinearLayout>

</android.support.v4.widget.DrawerLayout>

person peguerosdc    schedule 30.11.2014    source источник
comment
не могли бы вы добавить xml вашей активности туда, где вы добавили эту панель инструментов?   -  person Nguyễn Hoài Nam    schedule 30.11.2014
comment
@ NguyễnHoàiNam готово, пожалуйста, посмотрите мою правку. Заранее спасибо, и я думаю, что это не связано с самой деятельностью, потому что это происходит и в других действиях.   -  person peguerosdc    schedule 30.11.2014
comment
ну, поскольку ваша тема правильная (атрибут NoActionBar, colorPrimary и т. д.), я хочу убедиться, что у вас не определены стили values-v11 и values-v14. Это может переопределить вашу недавнюю тему на ваших устройствах 4.2.2. И предположим, что у вас нет программных изменений в вашей панели инструментов (в коде), я попытаюсь протестировать ваш код на своем устройстве.   -  person Nguyễn Hoài Nam    schedule 30.11.2014
comment
@ NguyễnHoàiNam Спасибо, и нет, эта тема находится в values и values-21 пуста, в настоящее время у меня больше нет values-vX папок. Я следую официальному руководству по навигационному ящику и не касаясь панели инструментов другими способами. Просто хочу сказать, что панель инструментов была примером, но это происходит в более случайных виджетах (например, TextView).   -  person peguerosdc    schedule 30.11.2014
comment
Это странно (ну как и ожидалось). Считаете ссылкой на этот вопрос? stackoverflow.com/questions/2118251/. Если это не поможет, я хотел бы узнать ваш манифест (где вы использовали свою тему, в теге Application или в теге Activity), ваш класс активности, в котором проявляется странное поведение, а также ваше определение Widget.TextView.White. Но сначала подумайте о том, как правильно использовать контекст.   -  person Nguyễn Hoài Nam    schedule 30.11.2014
comment
@ NguyễnHoàiNam ну, я не знал об этой штуке с Контекстом. Я изменил некоторые из этих злоупотреблений и буду продолжать играть со своим приложением, если такое поведение прекратится / продолжится, я дам вам знать. Спасибо.   -  person peguerosdc    schedule 30.11.2014
comment
@ NguyễnHoàiNam думал, что проблема решена, но нет, это случилось снова. Я думаю, что это может быть ошибка, о которой говорится ниже.   -  person peguerosdc    schedule 02.12.2014


Ответы (2)


Проблема связана с тем, как обрабатывается фон панели инструментов. Он является общим для всех экземпляров панели инструментов, поэтому, если вы склонны изменять альфа-канал фона панели инструментов, вы изменяете альфа-канал рисованного объекта, который также повторно используется на других экранах.

Убедитесь, что вы не манипулируете свойствами фона панели инструментов, вместо этого устанавливайте новый цвет фона / возможность рисования каждый раз, когда вы хотите его настроить.

person Andrzej Chmielewski    schedule 27.04.2015
comment
Вау! Я не знал о функциях этой панели инструментов! В настоящее время у меня нет доступа к этому приложению, но на самом деле я манипулировал альфа-каналом панели инструментов в другом действии, так что это, вероятно, правильный ответ (возможно, кто-то сможет его подтвердить). Было бы интересно узнать, как вы это обнаружили. - person peguerosdc; 07.05.2015
comment
на основе документации: по умолчанию все экземпляры чертежей, загруженные из одного и того же ресурса, имеют общее состояние; если вы измените состояние одного экземпляра, все остальные экземпляры получат такое же изменение. - person Andrzej Chmielewski; 08.05.2015
comment
спасает мой день, танки братан - person Mohsen Navabi; 16.11.2016

Возможно, эти ошибки библиотеки поддержки связаны с вашей проблемой.

https://code.google.com/p/android/issues/detail?id=78289
https://code.google.com/p/android/issues/detail?id=78346

К сожалению, до сих пор не исправлено в 21.0.2

person Antonio Jose    schedule 01.12.2014
comment
Я думаю, что это ошибка, первый билет выглядит примерно так же, как и в моем случае, и я обнаружил еще один. - person peguerosdc; 02.12.2014
comment
Да, похоже, все они связаны. Я надеюсь, что исправлю их в ближайшее время, потому что прошел как месяц с тех пор, как я жду ... - person Antonio Jose; 02.12.2014