将渐变颜色设置为状态栏片段

时间:2017-12-13 05:05:24

标签: android android-fragments statusbar

我正在尝试将Gradient Color设置为My android应用程序中的状态栏。对于Activity,我将代码放在BaseActivity中的代码下面。它工作正常。

public void setStatusBarColor()
{
    try
    {
        Window window = getWindow();
     window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        {
            Drawable background = this.getResources().getDrawable(R.drawable.gradient);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(this.getResources().getColor(R.color.transparent));
            window.setNavigationBarColor(this.getResources().getColor(R.color.transparent));
            window.setBackgroundDrawable(background);
        }
    }
    catch (Exception ex)
    {
        GSLogger.e(ex);
    }
}

现在,我想将相同的渐变颜色应用于Fragment。我有一个导航抽屉,我有近8 fragments。我想将此渐变颜色应用于状态栏。上面的代码同样适用于BaseFragment。它不会影响任何颜色。但是,当我应用单色代码时,它工作正常。这是下面的代码。

public void setStatusBarColor()
{
    try
    {
        Window window = getActivity().getWindow();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        {
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(getResources().getColor(R.color.black));
        }
    }
    catch (Exception ex)
    {
        GSLogger.e(ex);
    }
}

这里有什么问题?我无法将渐变颜色应用于Fragment。但是相同的代码适用于Activity。

帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的片段必须是活动的一部分。您可以在活动中编写此代码,并在片段中调用它。

public void updateStatusBarColor(String color){// Color must be in hexadecimal fromat 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.parseColor(color));
} }

从片段中调用此方法

((ActivityName)getActivity()).updateStatusBarColor("#000000")