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));
}
Это остановит вашу анимированную версию для повторного использования той же графики и влияет на другие ваши действия.