2015-09-06 72 views
2

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

<?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

+0

这个答案可以帮助你吗? http://stackoverflow.com/questions/22192291/how-to-change-the-status-bar-color-in-android – Jackpile

+0

@Teddis不,这个问题更多的是关于状态栏的颜色。在我的情况下,我希望状态栏是透明的,更重要的是,我希望我的活动的顶部出现在状态栏下方,如上例所示。 – JohnnyLambada

回答

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" 
     /> 
+0

这适用于版本21(棒棒糖)及以上版本。它会在以前的版本上编译和执行,但状态栏不会透明,并且会覆盖活动的顶部。据我所知,只有在棒棒糖及以上才能做到这一点。 谢谢! – JohnnyLambada

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); 

佛[R我,方法#1更好,因为它不设置导航栏透明

+0

对于API 21及更高版本,'setStatusBarColor'似乎不是必需的。它不适用于低于21的API级别。 – JohnnyLambada

+0

@JohnnyLambada它已经是透明的,你不需要设置,但是当你想用某种颜色设置状态栏时,你将需要它 –