我正在研究棒棒糖,我知道如何通过设置此标志来为状态栏着色 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);
}
}
});
}