PrimaryColor панели инструментов прозрачен при возобновлении

У меня странная проблема, и я думаю, что это как-то связано с темой.

Я делю свое приложение на три части: активность на панели инструментов, активность в списке и активность в деталях. Каждое мероприятие имеет одну и ту же тему. Но после возобновления действия 3 моя Панель инструментов прозрачна и потеряла свой основной цвет.

Я могу избежать этого, скопировав тему и переименовав ее.

Есть ли у кого-нибудь решение для этого?

<style name="TransAppTheme" parent="AppTheme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:textColorPrimary">@color/text_primary</item>
    <item name="android:textColorSecondary">@color/text_secondary</item>
    <item name="colorPrimary">@color/dukes_blue_dark</item>
    <item name="colorPrimaryDark">@color/dukes_blue_statusbar</item>
    <item name="colorAccent">@color/accent_amber_200</item>
    <item name="colorButtonNormal">@color/dukes_blue_dark</item>
    <item name="colorControlNormal">@color/dukes_blue_dark</item>
    <item name="colorControlActivated">@color/dukes_blue_dark</item>
</style>

1 ответ

Решение

Да, я оживил свою панель инструментов. Исчезает до прозрачного во время прокрутки. Но я не использую один и тот же экземпляр Панели инструментов во время работы со списком и деталями.

Причина такого поведения лежит в анимации рисования панелей инструментов, у меня была такая же проблема.

Из-за того, что панели инструментов используют один и тот же стиль / тему, цвет рисуемой панели инструментов кэшируется. Изменение цвета панелей инструментов (его анимация) приведет к изменению этого сохраняемого в кэше цветового экземпляра. Стиль недействителен, цвет прозрачен, и это также повлияет на ваши родительские действия. Это столько, сколько я понял.

Вы можете легко изменить это, используя другую анимацию для вашей анимированной панели инструментов:

// mToolbar is the toolbar you are trying to animate
final int color = ContextCompat.getColor(background.getContext(), R.color.primary);
if (Build.VERSION.SDK_INT > 15) {
    mToolbar.setBackground(new ColorDrawable(color));
} else {
    //noinspection deprecation
    mToolbar.setBackgroundDrawable(new ColorDrawable(color));
}

Это остановит вашу анимированную версию для повторного использования той же графики и влияет на другие ваши действия.

Другие вопросы по тегам