Android:状态栏不是过渡到新活动的主题

Posted

技术标签:

【中文标题】Android:状态栏不是过渡到新活动的主题【英文标题】:Android: status bar not theme on transitiong to new activity 【发布时间】:2015-09-03 15:50:58 【问题描述】:

我创建了一个包含 2 个活动的简单应用。主(启动器)活动主题正确,colorPrimaryDark 应用于状态栏。 但是当我过渡到新的活动时,除了状态栏外,一切似乎都很正常。它不知何故染成白色。知道为什么会发生这种情况吗?

在 OnePlus One 上运行(Lollipop 5.0.2)

目标 API -> 16+

values/styles.xml

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/PrimaryColor</item>
    <item name="colorPrimaryDark">@color/PrimaryDarkColor</item>
    <item name="colorAccent">@color/accent</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

values-v21/styles.xml

<style name="AppTheme" parent="AppTheme.Base">
    <item name="android:windowContentTransitions">true</item>
    <item name="android:windowAllowEnterTransitionOverlap">true</item>
    <item name="android:windowAllowReturnTransitionOverlap">true</item>
    <item name="android:windowSharedElementEnterTransition">@android:transition/slide_bottom</item>
    <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

layout/activity_settings.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/content"
    android:layout_
    android:layout_
    android:background="#856"
    android:fitsSystemWindows="true"
    android:orientation="vertical"
    tools:context=".SettingsActivity">

    <include layout="@layout/toolbar" />

</LinearLayout>

【问题讨论】:

也许this 会帮助你 【参考方案1】:

改变

<item name="android:statusBarColor">@android:color/transparent</item>

<item name="android:statusBarColor">@color/PrimaryDarkColor</item>

【讨论】:

这不应该也影响主启动器活动吗? PrimaryColorDark 会通过这些设置自动应用于主要活动。 我相信它显示为灰色,因为您将 statusBarColor 设置为透明。尝试完全删除该行 如果我更改或删除上述样式,那么我在主要活动中的导航抽屉将失去一个在状态栏下绘制导航抽屉的功能。就像在这个image 中一样,所以我保持样式不变,并在相关活动中以编程方式更改状态栏颜色:getWindow().setStatusBarColor(getResources().getColor(R.color.PrimaryDarkColor)); 但它必须在 values-v21/styles.xml【参考方案2】:

把api等级改成11+,就可以找到了。将主题更改为 DarkActionBar

【讨论】:

【参考方案3】:

您可能不再需要这个,但我最近遇到了这个问题,所以也许这会对其他人有所帮助。

我通过在 values-v21/styles.xml 中创建从 AppTheme 扩展的新样式来修复它:

<style name="AppTheme.SolidStatusBar">
    <item name="android:statusBarColor">@color/PrimaryDarkColor</item>
</style>

并将其用作清单中的新活动主题。这样您的更改就不必干扰需要使用半透明状态栏的活动,例如您的主要活动。

我不知道为什么会这样。

【讨论】:

【参考方案4】:

values-v21/styles.xml,更改

<item name="android:statusBarColor">@android:color/transparent</item>

<item name="android:statusBarColor">@color/colorPrimaryDark</item>

【讨论】:

以上是关于Android:状态栏不是过渡到新活动的主题的主要内容,如果未能解决你的问题,请参考以下文章

Android 应用中 v21 的导航栏和状态栏颜色(无主题库)

Android如何设置顶部状态栏颜色(主题)

Android 将App的内容延伸到状态栏/导航栏

Android状态栏着色(非沉浸式状态栏)

如何在android中只显示状态栏

如何在Android中隐藏状态栏