导航栏后面的 Snackbar

Posted

技术标签:

【中文标题】导航栏后面的 Snackbar【英文标题】:Snackbar behind navigation bar 【发布时间】:2016-08-03 23:41:41 【问题描述】:

在横向模式下,我正在使用

    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

显示和隐藏导航栏。

当我在显示导航时创建 Snackbar 时

Snackbar bar  = Snackbar.make(snackbarContainer, "exiting", Snackbar.LENGTH_INDEFINITE);
    bar.setAction("Testing", new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            //no-op
        
    );
    bar.show();

导航栏正在覆盖 Snackbar 的操作文本。 有没有办法根据导航栏是否显示自动调整小吃栏的宽度?

【问题讨论】:

【参考方案1】:

您可以添加CoordinatorLayout(例如,使用ConstraintLayout 时,将其绑定到父级的底部)。

接下来,将 CoordinatorLayout 的 id 提供给 Snackbar.make(...) 函数(或 CoordinatorLayout 中的任何子函数)。

snackbar 将从当前视图迭代视图,直到找到 CoordinatorLayout 并将其自身附加到它。

【讨论】:

【参考方案2】:

您可能正在寻找这个:

private void displaySnackBarWithBottomMargin(Snackbar snackbar, int sideMargin, int marginBottom) 
    final View snackBarView = snackbar.getView();
    final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) snackBarView.getLayoutParams();

    params.setMargins(params.leftMargin + sideMargin, params.topMargin, params.rightMargin + sideMargin, params.bottomMargin + marginBottom);

    snackBarView.setLayoutParams(params);
    snackbar.show();

实际上是在以下位置找到的: https://***.com/a/34844669/371749

如果您从导航栏高度(48dp)添加边距底部,它会完美地显示在导航栏上方。

【讨论】:

以上是关于导航栏后面的 Snackbar的主要内容,如果未能解决你的问题,请参考以下文章

如何固定 Snackbar 的高度和位置?

Android - 我的 Snackbar 出现在底部导航栏的前面而不是它的上方,如何解决?

如何在导航栏后面显示图像?

当导航栏是超级视图视图时,如何在导航栏后面放置视图?

Android Draw 在状态栏后面但不在导航栏后面

XLPagerTabStrip ButtonBar 粘在导航栏后面