从透明状态栏更改为彩色状态栏安卓



我正在研究棒棒糖,我知道如何通过设置此标志来为状态栏着色 FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 并通过以下方式设置颜色 getWindow().setStatusBarColor(color);

但是我有一个图像和一个透明的ActionBar,我想在操作栏后面显示图像,当用户滚动图像下方的ListView时,状态栏应该用颜色填充ActionBar

问题是在状态栏

后面显示图像,然后在滚动填充状态栏后显示图像。我不知道如何达到这种效果。

任何帮助将不胜感激

首先,

您必须在样式上添加半透明动作栏样式.xml

    <style name="AppTheme.TranslucentActionBar">
    <item name="android:actionBarStyle">@style/Widget.ActionBar.Transparent</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="actionBarStyle">@style/Widget.ActionBar.Transparent</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="android:windowContentOverlay">@null</item>
   <!--  <item name="windowContentOverlay">@null</item> -->
</style>

在类中添加此方法。

@TargetApi(19) 
private void setTranslucentStatus(boolean on) {
    Window win = getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    if (on) {
        winParams.flags |= bits;
    } else {
        winParams.flags &= ~bits;
    }
    win.setAttributes(winParams);
}

接下来,在 setContentView() 之前将其添加到 OnCreate 方法中

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            setTranslucentStatus(true);
        }

然后状态栏将覆盖您的活动。

添加

滚动侦听器并添加设置状态栏 alpha 方法,如下所示。

getWindow().setStatusBarColor(Color.argb(alpha, 253, 152, 0));

您需要使用以下标志来使系统栏透明并在其上绘制:

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

如方法 1 中所述:棒棒糖:在状态栏后面绘制,其颜色设置为透明

之后,将系统栏设置为透明应该可以解决问题(请注意,这仅在 API 21 或更高版本中可用):

getWindow().setStatusBarColor(Color.TRANSPARENT);

然后,要在屏幕滚动时进行更改,您需要使用滚动侦听器在系统栏的实心和透明之间切换

,如下所示:
getWindow().setStatusBarColor(getPrimaryDarkkColor());

getWindow().setStatusBarColor(Color.TRANSPARENT);

考虑到侦听器中的滚动位置。

希望这有帮助,

只需在

onCreate方法中复制此代码并继续编码:)

法典:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

nestedScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                if (scrollY > 50) {
                    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
                    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
                    getWindow().setStatusBarColor(Color.rgb(85, 155, 247));
                } else {
                    getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
                    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
                }
            }
        });
    }

最新更新