我的活动请求全屏布局:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
在xml布局中,将fitsSystemWindows属性设置为填充状态栏高度:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<!-- The main content view -->
<android.support.design.widget.CoordinatorLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
app:contentScrim="@color/actionbar_title_color"
android:fitsSystemWindows="true">
它与appcompat-v7:23.2.1
一起编译,在API21设备上运行良好,但在API16设备上不应用填充。有什么提示吗?
更新
反弹:为什么API16设备上没有应用填充?
来自官方文件Android开发模式
在KitKat及以下上,您的自定义视图可以覆盖
fitSystemWindows()
并提供您想要的任何功能—只是如果你已经消耗了insets,则返回true;如果你愿意,则返回false给其他观点一个机会。然而,在棒棒糖和更高版本的设备上,我们提供了一些新的API使自定义此行为更加容易并与视图的其他行为。相反,您将覆盖onApplyWindowInsets(),它允许视图根据需要消耗尽可能多或尽可能少的插入,并能够调用根据需要在子视图上显示ApplyWindowInsets()。
如果您只需要需要自定义行为棒棒糖和更高的你可以使用
ViewCompat.setOnApplyWindowInsetsListener()
,将给出首选项而不是视图的onApplyWindowInsets()
。ViewCompat提供了调用onApplyWindowInsets()
的助手方法,以及不进行版本检查的dispatchApplyWindowInsets()
。
现在,您需要检查使用哪个api级别的条件,并根据等应用条件
if(API < Kitkat){
fitSystemWindows()
}else if(API > Lollipop){
onApplyWindowInsets()
}
请查看此答案以了解更多详细信息。
另请阅读http://developer.android.com/reference/android/view/View.html#fitSystemWindows%28android.graphics.Rect%29