【问题标题】:Set Gradient Color to Status Bar Fragment将渐变颜色设置为状态栏片段
【发布时间】:2017-12-13 05:05:23
【问题描述】:

我正在尝试在我的 android 应用程序中将 Gradient 颜色设置为状态栏。对于 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);
    }
}

这可能是什么问题?我无法将渐变颜色应用于片段。但同样的代码对 Activity 也能正常工作。

我们将不胜感激。

【问题讨论】:

    标签: android android-fragments statusbar


    【解决方案1】:

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

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

    【讨论】:

    • 如何应用渐变色?正如我之前所说,单色效果很好。我遇到了渐变颜色的问题。
    • @Jacky 也许这个链接可以解决你的问题whatsthatlambda.com/android/…
    猜你喜欢
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多