【问题标题】:Snackbar behind navigation bar导航栏后面的 Snackbar
【发布时间】: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 的操作文本。 有没有办法根据导航栏是否显示自动调整小吃栏的宽度?

【问题讨论】:

    标签: android navigationbar 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://stackoverflow.com/a/34844669/371749

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

      【讨论】:

        猜你喜欢
        • 2019-02-19
        • 2016-03-12
        • 2016-06-11
        • 2018-11-10
        • 1970-01-01
        • 2022-09-23
        • 2012-09-27
        • 1970-01-01
        相关资源
        最近更新 更多