MaterialComponents Snackbar 在状态栏下方绘图,尽管我在其上定义了正确的边距

MaterialComponents Snackbar drawing below the status bar although I define correct margins on it

我目前正在我的应用程序中实现 MaterialComponents Snackbar 并开始使用

(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)

Snackbar 开始在导航栏后面绘制。通常这应该不是问题,因为我只是使用代码来定义 Snackbar 上的边距,包括导航栏高度,但无论如何,它没有被应用并保持这样:

我用来定义边距的代码如下:

final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) snackBarView.getLayoutParams();
            params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin + ThemeUtils.getNavigationBarHeight(this));

            snackBarView.setLayoutParams(params);

有人看到我犯的错误吗?任何解决此问题的帮助将不胜感激!提前致谢!

这是我用 FLAG_LAYOUT_NO_LIMITS 实现的 Snackbar,它运行良好。

Snackbar snackbar = Snackbar.make(coordinatorLayout, "Doing good...", Snackbar.LENGTH_LONG);
                View snackBarView = snackbar.getView();
                final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) snackBarView.getLayoutParams();
                params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin + getNavigationBarHeight());

                snackBarView.setLayoutParams(params);
                TextView tv = snackBarView.findViewById(android.support.design.R.id.snackbar_text);
                tv.setTextColor(Color.YELLOW);
                snackBarView.setBackgroundColor(Color.BLACK);
                snackbar.show();

我的 getNavigationBarHeight() 在哪里:

public int getNavigationBarHeight() {
        int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
        if (resourceId > 0) {
            Toast.makeText(this, "nav bar height: " + getResources().getDimensionPixelSize(resourceId), Toast.LENGTH_SHORT).show();
            return getResources().getDimensionPixelSize(resourceId);
        }
        return 0;
    }

我的解决方案现在是在我的布局中添加一个 ConstraintLayout,我在其上设置适合导航栏的边距。然后我将 Snackbar 设置到这个新的 ConstraintLayout 中。相当 hacky,但好吧,我想总比不工作要好......