我在Lollipop& amp;我知道如何通过设置此标志FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
&设置颜色
getWindow().setStatusBarColor(color);
但我有一张图片&一个透明的ActionBar
&我想在动作栏后面显示图像&当用户滚动图像下方的ListView
时,状态栏应填充颜色为ActionBar
问题是显示状态栏后面的图像&之后用颜色滚动填充状态栏。我不知道如何实现这种效果。
任何帮助将不胜感激
答案 0 :(得分:0)
首先,您必须在style.xml上添加TranslucentActionBar Style
<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));
答案 1 :(得分: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中所述: Lollipop : draw behind statusBar with its color set to transparent
之后,将系统栏设置为透明应该可以解决问题(请注意,这仅适用于API 21或更高版本):
getWindow().setStatusBarColor(Color.TRANSPARENT);
然后,为了在屏幕滚动时进行更改,您需要使用滚动侦听器在系统栏的实心和透明之间切换,如下所示:
getWindow().setStatusBarColor(getPrimaryDarkkColor());
和
getWindow().setStatusBarColor(Color.TRANSPARENT);
考虑到听众中的滚动位置。
希望这有帮助,
答案 2 :(得分:0)
只需将此代码复制到您的 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);
}
}
});
}