如何更改启动画面的状态栏颜色?

3
我正在使用React Native构建我的Android应用程序,并遵循此tutorial设置我的启动屏幕。这是result。我的主要问题是状态栏颜色变为黑色,我无法通过在styles.xml文件中添加<item name="colorPrimaryDark">@color/colorPrimaryDark</item>以及在colors.xml文件中添加<color name="blue">#009CD7</color><color name="colorPrimaryDark">#009CD7</color>来解决它。
奖励问题:如何将图像居中而不硬编码边距,使其保持在中心位置,无论应用程序在哪个设备上运行?

在你的样式中添加这一行代码:<item name="android:statusBarColor">@color/your_color</item>。 - aslamhossin
@AslamHossin 很不幸,什么也没改变。 - naderabdalghani
如果您的主题是MaterialTheme,那么它会起作用吗? - aslamhossin
你已经将上述代码行放置在v21/style.xml中,状态栏颜色的更改是在API 21之后引入的。 - aslamhossin
6个回答

15

在您当前的启动主题中添加colorPrimaryDark一个新项或创建一个新主题。

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:statusBarColor">@android:color/white</item>
    <item name="android:windowLightStatusBar">true</item>
    <item name="android:background">@drawable/background_splash</item>
    <item name="colorPrimaryDark">@android:color/white</item>
</style>

然后在显示启动画面时使用它作为第二个参数。

public class MainActivity extends ReactActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        SplashScreen.show(this, R.style.SplashTheme, true);
        super.onCreate(savedInstanceState);
    }
}

1
你应该给show函数添加第三个参数,将其设置为true。 - Vivek Aggarwal

4
如果你看到类似于"int can not be boolean"的错误,请在MainActivity.java中添加第三个参数。
SplashScreen.show(this, R.style.SplashTheme, true);

这个方法在我的情况下可行,我不得不对它进行修改:SplashScreen.show(this,R.style.SplashScreenTheme, true); - Appy Mango
兄弟,你能分享一下完整的代码来改变React Native启动屏幕状态栏的背景颜色吗? - undefined

1
在android/app/src/main/res/values/styles.xml中创建一个样式定义:
<?xml version="1.0" encoding="utf-8"?>
    <resources>
         <style name="SplashTheme" parent="SplashScreen_SplashTheme">
             <item name="colorPrimaryDark">your_color</item>
         </style>
   </resources>

现在你已经修改了 show 方法以包含你的自定义样式:
SplashScreen.show(this, R.style.SplashTheme);

你现在完成了。 :)

0
如果你想改变任务栏的颜色,只需在输出函数中添加活动和所需的颜色即可。
fun setTaskBarColored(colored: Int,activity: Activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            activity.window!!.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            activity.window!!.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
            activity.window!!.statusBarColor = ContextCompat.getColor(activity, colored)
        }
    }

同样的情况也适用于NavigationBar

    fun setNavigationBarColored(colored: Int, activity: Activity){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            activity.window!!.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            activity.window!!.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
            activity.window!!.navigationBarColor =  ContextCompat.getColor(activity, colored)
        }
    }

1
我应该在哪里添加这些“activities”?谢谢。 - naderabdalghani

0
终于在头疼了一阵后找到了答案,而且在包文档中也提到了。这将改变移动设备的状态栏和底部导航栏的背景颜色,这是在配置启动画面后所需的。步骤如下:
在Android中,将以下代码添加到app/src/main/res/values/colors.xml文件中。
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="status_bar_color">#E12027</color> // your desired color
</resources>

将此代码添加到Android中的app/src/main/res/values/styles.xml文件中。
  <style name="SplashScreenTheme" parent="SplashScreen_SplashTheme">
        <item name="colorPrimaryDark">@color/status_bar_color</item>
    </style>


最后,在MainActivity.java文件中将这段代码改为:
SplashScreen.show(this, R.style.SplashScreenTheme, true);

-1

您可以将此JSX代码简单地添加到应用的根目录,而无需编辑任何本地文件。

<StatusBar backgroundColor="blue" barStyle="light-content" />

为了使您的图像居中,您可以将其包裹在一个视图中,并添加样式"{justifyContent: 'center', alignItems: 'center'}"。如果这无效,您还可以直接在图像组件中添加样式"alignSelf: 'center'"。

1
在启动画面期间,我得到了灰色的颜色,只有当我的导航准备好显示时,它才会更改为我选择的颜色。 - Michail Pidgorodetskiy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接