fitsSystemAPI16设备上的Windows不工作



我的活动请求全屏布局:

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

相关内容

  • 没有找到相关文章

最新更新