导航栏后面的Snackbar

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的操作文本被导航栏遮挡了。 是否有一种方法可以根据导航栏是否显示自动调整Snackbar的宽度?

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://dev59.com/SFwZ5IYBdhLWcg3wYvgk#34844669

如果您将导航栏高度(48dp)的下边距添加上,它就完美地出现在导航栏上方。


2
您可以添加一个CoordinatorLayout(例如在使用ConstraintLayout时,将其绑定到父视图的底部)。
接下来,将CoordinatorLayout的ID赋给Snackbar.make(...)函数(或CoordinatorLayout中的任何子视图)。
Snackbar将遍历从当前视图开始的所有视图,直到找到一个CoordinatorLayout并将自己附加到它上面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接