【问题标题】:Android: Changing the colour of the status bar while the app is in backgroundAndroid:在应用程序处于后台时更改状态栏的颜色
【发布时间】:2016-05-25 15:55:34
【问题描述】:

我只能找到在应用程序运行时让状态栏改变颜色的解决方案。我已经成功地做到了,但是当应用程序进入后台时(比如用户点击主页按钮时),我需要它保持新颜色。类似于当您呼叫某人并点击主页按钮时状态栏的颜色变化。

在我的 OnCreate 方法中,我有:

    Window window = this.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

    SystemBarTintManager tintManager = new SystemBarTintManager(this);
    tintManager.setStatusBarTintEnabled(true);
    tintManager.setStatusBarTintColor(Color.GREEN);
    tintManager.setStatusBarTintEnabled(true);

所以我发现的解决方案很大程度上取决于打开的应用程序。当用户点击主页按钮时,状态栏的颜色会随着应用的其余部分“缩小”。

【问题讨论】:

  • 我的理解是你想改变状态栏的颜色,当你的应用程序进入后台时,你应该有新的状态栏改变颜色
  • 如果我错了请纠正我
  • 我认为你是对的。通常状态栏是黑色或透明的,但我需要在我的应用程序处于后台时将其设置为红色
  • 您可以检测到您的应用何时进入后台,然后您遇到了问题??
  • 当用户使用 onPause() 方法将应用程序置于后台时,我可以轻松地执行我拥有的代码。但是我发现的所有更改状态栏颜色的方法都涉及更改窗口中的颜色,当应用程序发送到后台时,它会随着应用程序“缩小”,从而在应用程序不在前台时离开常规状态栏。当我使用 onPause() 时,它只会改变颜色一秒钟,然后缩小应用程序,包括我的新颜色条,留下正常的状态栏

标签: android background-process statusbar


【解决方案1】:

在您的活动中添加以下方法:

@Override
protected void onPause() {
    super.onPause();

    // put your code here
}

【讨论】:

  • 感谢您的帮助,但没有成功。我发现的所有更改状态栏的解决方案都依赖于在活动的 onCreate 方法中创建一个窗口
【解决方案2】:

试试这个,为我工作!

int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) statusBarHeight = getResources().getDimensionPixelSize(resourceId);

final WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        statusBarHeight,
        WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,   // Allows the view to be on top of the StatusBar
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,    // Keeps the button presses from going to the background window and Draws over status bar
        PixelFormat.TRANSLUCENT);
parameters.gravity = Gravity.TOP | Gravity.CENTER;

LinearLayout ll = new LinearLayout(this);
ll.setBackgroundColor(Color.TRANSPARENT);
LinearLayout.LayoutParams layoutParameteres = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
ll.setLayoutParams(layoutParameteres);

TextView tv = new TextView(this);
ViewGroup.LayoutParams tvParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
tv.setLayoutParams(tvParameters);
tv.setTextColor(Color.WHITE);
tv.setGravity(Gravity.CENTER);
tv.setText("123");
ll.addView(tv);

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.addView(ll, parameters);

来源:https://stackoverflow.com/a/45392031/13621167

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2015-05-09
    • 2015-04-13
    • 1970-01-01
    相关资源
    最近更新 更多