我正在尝试将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。
帮助将不胜感激。
答案 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")