如何使Android活动显示在通知区域后面

时间:2015-09-06 23:01:48

标签: android android-layout

我正在尝试制作一个渗透到通知区域的Android活动,如下所示。 I have a solution,但我不喜欢它,因为它是纯粹的魔法 - 我不知道它为什么会起作用,它就是这样。在下面的代码示例中,我有CoordinatorLayout持有AppBarLayout持有CollapsingToolbarLayout。如果以任何方式删除或更改任何此类效果,则效果将不再有效。底部的LinearLayout包含我想要使用的实际代码布局信息。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    >
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        >
        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    </android.support.design.widget.AppBarLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        >
        <ImageView
            android:id="@+id/backdrop"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            />
    </LinearLayout>
</android.support.design.widget.CoordinatorLayout>

Screenshot of an image bleeding into the notification area

2 个答案:

答案 0 :(得分:1)

2种方法:

方法#1: onCreate方法:

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
getWindow().setStatusBarColor(Color.TRANSPARENT);

方法#2:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setStatusBarColor(Color.TRANSPARENT);

对我来说,方法#1更好,因为它没有设置导航栏透明

答案 1 :(得分:1)

您可以设置SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN标志:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

然后,您在布局中唯一需要的是ImageView。不需要fitsSystemWindows

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/backdrop"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        />