WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS不更改状态栏颜色

时间:2019-09-17 13:13:51

标签: android

我在android全屏显示图片的情况下在Android上进行了图库复制。 所以它用在下面的行

window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

现在可以正常工作,我的意思是图像现在是全屏显示,但是当图像背景为白色时会出现问题,因为状态栏图标颜色为白色,因此看起来好像没有状态栏。

为解决这个问题,我尝试设置状态栏颜色。

window.setStatusBarColor(Color.TRANSPARENT)

但这也不起作用。 我尝试过设置其他值,例如。

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

但这也不行!您能帮我设置

时如何使状态栏颜色为transparent
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

预先感谢

3 个答案:

答案 0 :(得分:0)

在“活动”中尝试此操作,然后再设置内容视图

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setStatusBarColor(getFactorColor(getResources().getColor(R.color.action_bar_color), 0.4f));
}

其中的getFactorColor方法是

public static int getFactorColor(int color, float factor) {
    float[] hsv = new float[3];
    Color.colorToHSV(color, hsv);
    hsv[2] *= factor;
    color = Color.HSVToColor(hsv);
    return color;
}

答案 1 :(得分:0)

将标志设置为FLAG_LAYOUT_NO_LIMITS会使状态栏完全透明且不能具有任何颜色,请删除这些标志,然后更改颜色。

编辑:我如何实现您想要的(状态栏位于应用程序内部,并具有一定的颜色和一定的透明度):


  private fun changeStatusBarToOpaque() {
        with(window) {
            clearFlags(FLAG_LAYOUT_NO_LIMITS)
            clearFlags(TRANSLUCENT_STATUS)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                statusBarColor = getCompatColor(R.color.opacityWhite)
                addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
            }
        }
    }

您的主题应该具有这两个标签

<item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>

答案 2 :(得分:0)

添加此方法

public static void setStatusBarColor(int color, Activity context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = context.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(context.getResources().getColor(color));
    }
}

并像Utilities.setStatusBarColor(R.color.someColor, context);

那样称呼它

android具有透明色Color.TRANSPARENT

或将其添加到您的colors.xml

<color name="trans">#00FFFFFF</color>

希望这会有所帮助!