【问题标题】:Android status bar hide/change color in splash screenAndroid状态栏在启动画面中隐藏/更改颜色
【发布时间】:2017-11-05 10:45:28
【问题描述】:

我按照本教程在我的应用程序中实现了一个无布局的初始屏幕:https://www.bignerdranch.com/blog/splash-screens-the-right-way/

我设法更改了 MainActivity 状态栏的颜色,甚至使用主题使其全屏显示。但是,我尝试过的所有方法都不适用于启动画面。可能是因为它不使用布局,而是直接使用drawable作为背景:

<style
    name="AppTheme"
    parent="@android:style/Theme.Material.Light.NoActionBar">

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:textColor">@color/textColor</item>
    <item name="iconColor">@color/iconColor</item>
    <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style
    name="SplashTheme"
    parent="AppTheme">

    <item name="android:windowBackground">@drawable/splash_screen</item>
</style>

我尝试使用全屏主题,在活动使用的主题中设置 android:statusBarColor,我还尝试了以下两段代码:

View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(ContextCompat.getColor(this, android.R.color.transparent));

这 4 种方法适用于我的正常活动,但不适用于启动画面。有什么我可以做的吗?

编辑:我的目标是 minSdkVersion 23

【问题讨论】:

    标签: android


    【解决方案1】:

    使用&lt;item name="android:windowFullscreen"&gt;true&lt;/item&gt;

    <style
        name="SplashTheme"
        parent="AppTheme">
        <item name="android:windowFullscreen">true</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
    </style>
    

    【讨论】:

    • 不起作用 :( 状态栏仍然显示为灰色。
    • 在样式“ falsetrue ”中添加它,否则将父值更改为“ Theme.AppCompat.Light.NoActionBar" 那么它应该可以工作
    • 不,这不是问题,父主题已经是 NoActionBar 反正。我真的认为问题与活动没有布局有关。
    【解决方案2】:

    好的,经过更多实验后,我发现我遇到了某种缓存问题。我尝试在另一部手机上安装我的应用程序,它按预期工作,而在我安装的第一部手机上,它没有更新。所以你知道, android:statusBarColor 的简单解决方案足以让它工作。

    现在关于缓存问题,这不是我第一次在那个屏幕上遇到它,它一定是没有布局和可绘制作为背景的特殊情况。我尝试使 Android Studio 中的缓存无效,我清理并重建了项目,我在手机上卸载了该应用程序,但没有任何效果。因此,如果您处于这种配置中,请尽可能尝试在另一部手机上运行您的应用,以检查您的解决方案是否尚未正常工作,只是没有在您的设备上更新。

    【讨论】:

      【解决方案3】:

      在你的theme.xml中使用它

      <item name="android:navigationBarColor">@color/black</item>
      

      【讨论】:

        【解决方案4】:

        几个月前我也遇到过类似的问题。我已经设法通过使用以下代码解决了这个问题。

        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        在 setContentView 之后在您的 java 文件中使用上述代码。

        然后在清单文件中为您尝试隐藏标题栏的活动使用它。

        android:theme="@style/Theme.AppCompat.NoActionBar"

        要改变标题栏的颜色,可以使用下面这行代码,

        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#000000")));
        

        在代码的值部分替换要添加到标题栏的颜色的十六进制代码。

        【讨论】:

        • 我想你把状态栏误认为操作栏了,状态栏是显示通知、电池和时间的小栏。
        • 要更改状态栏的颜色,请使用此代码。在您的情况下,您尝试将其设置为透明,因此通过使用它,您可以获得透明的状态栏。 getWindow().setStatusBarColor(Color.TRANSPARENT); PS - 此方法仅适用于 API 19 及更高版本。如果这不起作用,请在 styles.xml 中尝试此代码段 true
        • 您也可以在 /res/values-v21/styles.xml 中执行此操作:@android:color/transparent
        猜你喜欢
        • 1970-01-01
        • 2016-05-18
        • 2021-05-30
        • 2015-05-09
        • 2015-05-07
        • 1970-01-01
        • 1970-01-01
        • 2016-09-08
        • 2016-11-05
        相关资源
        最近更新 更多