迁移到Material Design主题后如何实现透明状态栏?



我正在将我的应用程序主题迁移到Material Design主题的过程中,我在某些情况下遇到了问题,我需要一个透明的状态栏(例如当使用CollapsingToolbarLayout时,当展开工具栏时应该是透明的,当折叠时它应该是主要的深色)。

在迁移之前,我的主题是这样的,所以我只定义了android:statusBarColor的主题覆盖,我需要一个透明的状态栏,其他地方的状态栏是默认的原色。

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>

迁移后,我正在处理以下内容,由于以下问题,我必须在基本主题中显式定义android:statusBarColor

<resources>
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
<item name="colorSecondary">@color/colorAccent</item>
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
</style>
<style name="AppTheme.TransparentStatusBar">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.MaterialComponents.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.MaterialComponents.Light" />
</resources>

但是因为似乎没有一个隐含的默认,这意味着,我得到一个蓝色(材料设计默认颜色)状态栏在所有情况下,我应用AppTheme.TransparentStatusBar主题。

例如,当我的CollapsingToolbarLayout展开时,我有一个透明的状态栏(如预期的那样),但当它折叠时,我有一个蓝色的状态栏(我希望它至少是默认情况下我的基本主题的颜色)。

工具栏扩展

工具栏崩溃有办法解决这个问题吗?

我找到了一个部分解决方案来修复至少我的CollapsingToolbarLayout问题:当我将app:statusBarScrim="?attr/colorPrimaryVariant"添加到它的定义时,我可以从我的主题迁移之前恢复外观,即我有透明的状态栏根据我的主题在扩展状态和在崩溃状态的颜色。

我将保留这个问题,以防有人有一个更全面的解决方案的想法,因为我仍然有透明状态栏的其他问题。例如,我仍然无法实现在透明状态栏下很好地混合的DrawerLayout

最新更新