1

我一直在使用 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()。但不知道如何以propromatically方式进行。有什么建议么?

4

2 回答 2

4

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

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));
于 2015-11-30T09:03:36.337 回答
0

如果您使用的是 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)
于 2020-03-15T10:20:34.660 回答