我正在努力理解fitsSystemWindows的概念,因为它依赖于它执行不同操作的 View 。根据官方文件,



现在,检查View.java类,我可以看到,将其设置为true时,窗口插图(状态栏,导航栏...)将应用于 View 填充,该填充根据上面引用的文档工作。这是代码的相关部分:

private boolean fitSystemWindowsInt(Rect insets) {
    if ((mViewFlags & FITS_SYSTEM_WINDOWS) == FITS_SYSTEM_WINDOWS) {
        mUserPaddingStart = UNDEFINED_PADDING;
        mUserPaddingEnd = UNDEFINED_PADDING;
        Rect localInsets = sThreadLocal.get();
        if (localInsets == null) {
            localInsets = new Rect();
            sThreadLocal.set(localInsets);
        }
        boolean res = computeFitSystemWindows(insets, localInsets);
        mUserPaddingLeftInitial = localInsets.left;
        mUserPaddingRightInitial = localInsets.right;
        internalSetPadding(localInsets.left, localInsets.top,
                localInsets.right, localInsets.bottom);
        return res;
    }
    return false;
}

随着新的Material设计的出现,新的类大量使用了此标志,这就是混淆的地方。在许多来源中,fitsSystemWindows被称为标志,用于设置将 View 放置在系统栏后面。参见here
ViewCompat.javasetFitsSystemWindows的文档中说:



据此,fitsSystemWindows仅仅意味着函数fitsSystemWindows()将被执行?新的Material类似乎只是在状态栏下使用它进行绘制。如果查看DrawerLayout.java的代码,我们可以看到以下内容:
if (ViewCompat.getFitsSystemWindows(this)) {
        IMPL.configureApplyInsets(this);
        mStatusBarBackground = IMPL.getDefaultStatusBarBackground(context);
    }

...
public static void configureApplyInsets(View drawerLayout) {
    if (drawerLayout instanceof DrawerLayoutImpl) {
        drawerLayout.setOnApplyWindowInsetsListener(new InsetsListener());
        drawerLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }
}

而且我们在新的CoordinatorLayoutAppBarLayout中看到了相同的模式。

这不是以与fitsSystemWindows文档完全相反的方式工作吗?在最后一种情况下,这意味着在系统栏后面绘制。

但是,如果您希望FrameLayout在状态栏后面绘制自身,则将fitsSystemWindows设置为true并不能解决问题,因为默认实现会执行最初记录的操作。您必须重写它,并添加与其他提到的类相同的标志。我想念什么吗?

最佳答案



https://medium.com/google-developers/why-would-i-want-to-fitssystemwindows-4e26d9ce1eec

关于android - fitSystemWindows到底能做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31761046/

10-11 00:14