在android中动态设置状态栏颜色

Posted

技术标签:

【中文标题】在android中动态设置状态栏颜色【英文标题】:Set status bar color dynamically in android 【发布时间】:2016-03-06 15:56:31 【问题描述】:

如何为应用程序动态设置状态栏颜色,在滑动(水平)状态栏颜色时使用视图寻呼机,标题栏和按钮应该改变颜色。根据我的代码标题和按钮颜色完美改变,但问题是状态栏颜色从数组列表中获取下一个颜色。如何解决该问题任何人都可以帮助我。这是我的代码

 private int[] colors = new int[]0xffffd200, 0xff37beb7, 0xff00ccff, 0xff8585c1, 0xfff2a03c, 0xff2a80b9, 0xfff15972,
        0xffe9776c, 0xff9dcc96,0xff76c069;

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
        Window window = ((Activity) context).getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

        int coloring = position % colors.length;
        int new_color = colors[coloring];
        window.setStatusBarColor(new_color);
        title_bar.setBackgroundColor(new_color);
        set_share.setBackgroundColor(new_color);

    
    else

        int color = position % colors.length;
        itemView.setBackgroundColor(colors[color]);
        title_bar.setBackgroundColor(colors[color]);
        set_share.setBackgroundColor(colors[color]);
    

【问题讨论】:

试试这个:How to set status bar color dynamically in android 【参考方案1】:

要更改状态栏颜色,请使用 setStatusBarColor(int color)。根据javadoc,我们还需要在窗口上设置一些标志。

工作的sn-p代码:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));

这取自以下参考: How to change status bar color to match app in Lollipop? [Android]

【讨论】:

设置状态栏颜色对我来说不是问题,标题栏和按钮颜色与状态栏颜色不同但传递相同颜色,如何解决该问题。我希望所有颜色都一样 对于按钮 useButton11.setBackgroundColor(getResources().getColor(R.color.example_color); 对于标题栏,您可以使用两种方法: 1. requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R. layout.main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle); 2 如果您使用“工具栏”,您可以直接设置 mToolbar.setBackground() 伙计,我不知道你是否理解我的问题,上面提到我的代码工作正常,但问题是示例 red,green,blue,yellow,同时滑动页面标题栏和按钮呈红色,但是状态栏采用(下一个颜色)绿色我不知道是什么问题 好的,所以当你使用 SwipeViews 或 ViewPager 时,它会初始化它的前一个片段和它的下一个片段,所以当你从一个视图寻呼机转到另一个时,状态栏会被赋予 Last Initialized Fragment 值状态栏,仅当用户在那里时才使用变量设置颜色。 所以它会解决你的问题,只需要当前的 ViewPager 并根据它只更改颜色。【参考方案2】:

来状态栏颜色,只能添加到API级别大于21的设备上。满足这个条件的设备可以动态改变状态栏颜色,如下图。

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
        window.setStatusBarColor(getResources().getColor(R.color.Statusbar));
    

【讨论】:

【参考方案3】:

当我想设置状态栏颜色时,我使用了https://github.com/jgilfelt/SystemBarTint

我就是这样用的:

public static void colorStatusBar(Window window, Activity activity) 
    Log.v(Constants.LOG_TAG, "Start defining color bar status");
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT)       
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        SystemBarTintManager tintManager = new SystemBarTintManager(activity);
        tintManager.setStatusBarTintEnabled(true);

        tintManager.setTintColor(activity.getResources().getColor(R.color.colorPrimaryDark));
    

但请注意,只有当您的应用在 API >= 19 的手机上运行时,才能设置状态栏颜色

【讨论】:

此代码仅适用于 KitKat,因为 if 声明。

以上是关于在android中动态设置状态栏颜色的主要内容,如果未能解决你的问题,请参考以下文章

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

Android设置状态栏颜色和状态栏文字、图标颜色

如何根据前景图像在android中动态更改状态栏的颜色?

Android标题栏状态栏图标文字颜色及背景动态变化

Android:具有动态 actionBar 颜色和 DrawerLayout 的透明状态栏

Swift-修改状态栏颜色