Android状态栏在启动画面中隐藏/更改颜色

时间:2017-06-04 15:35:07

标签: android

我按照本教程在我的应用中实现了无布局启动画面: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

3 个答案:

答案 0 :(得分:4)

使用<item name="android:windowFullscreen">true</item>

<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>

答案 1 :(得分:1)

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

现在关于缓存问题,这不是我第一次使用该屏幕,它必须是没有布局和drawable作为背景的特殊条件。我尝试在Android Studio中使缓存失效,我清理并重建了项目,我在手机上卸载了应用程序,但没有任何效果。因此,如果您使用此配置,只需尝试在另一部手机上运行您的应用,只是为了检查您的解决方案是否仍在运行,只是不在您的设备上进行更新。

答案 2 :(得分:0)

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

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

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

然后在清单文件中使用此选项来查找您要隐藏标题栏的活动。

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

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

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

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