7

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

    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 的操作文本被导航栏覆盖。有没有办法根据导航栏是否显示自动调整小吃栏的宽度?

4

2 回答 2

4

可能你正在寻找这个:

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)添加边距底部,它会完美地显示在导航栏上方。

于 2017-03-25T13:21:38.873 回答
2

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

接下来,将 的 id 赋予CoordinatorLayout函数Snackbar.make(...)(或 中的任何子项CoordinatorLayout)。

一个snackbar 将从当前的视图迭代视图直到它找到aCoordinatorLayout并将其自身附加到它。

于 2018-04-09T11:16:15.203 回答