【问题标题】:Android set Normal status bar programmaticallyAndroid以编程方式设置正常状态栏
【发布时间】:2023-04-09 15:27:01
【问题描述】:

我一直在使用 Material design 和 CollapsingToolbarLayout,并希望在其中一个片段中使用半透明状态栏。 我有带有 AppTheme 的 MainActivity(在 style.xml 中半透明状态栏和覆盖是假的)。我有 Fragment1 和 Fragment2 Fragment1 不应该有半透明状态栏。与primaryDarkColor 一样正常。但是,在 Fragment2 中,我需要以编程方式打开半透明状态栏。我通过这种方式实现了它:

   @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //Making status bar transparent
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window w = getActivity().getWindow(); // in Activity's onCreate() for instance
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

当我再次回到 Fragment1 时,状态栏是隐藏的。我想我应该禁用半透明状态栏 onPause() 或 onStop()。但不知道如何以程序方式进行。有什么建议吗?

【问题讨论】:

    标签: android material-design android-statusbar


    【解决方案1】:

    要更改状态栏颜色,请使用 setStatusBarColor(int color)。使用下面的代码

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

    【讨论】:

    • 谢谢!那行得通。但是,我的 Fragment1 视图现在仍然覆盖状态栏(工具栏的一部分现在位于状态栏下)。如何以编程方式将 windowActionModeOverlay 设置为 false?
    【解决方案2】:

    如果你使用的是kotlin,你可以用这段代码将状态栏设置为正常状态:

    fun Activity.setStatusBarNormal() {
        window.apply {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
                clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                statusBarColor = getColorCompat(R.color.colorPrimaryDark)
            decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE
        }
    }
    
    fun Context.getColorCompat(@ColorRes colorId: Int) = ContextCompat.getColor(this, colorId)
    

    【讨论】:

      猜你喜欢
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 2012-06-25
      • 2012-04-05
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      相关资源
      最近更新 更多