在横向模式下,我正在使用
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的操作文本正由导航栏覆盖。 有没有办法根据导航栏是否显示自动调整小吃栏的宽度?
答案 0 :(得分:1)
可能你正在寻找这个:
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)添加边距底部,它将完美地显示在导航栏上方。
答案 1 :(得分:0)
您可以添加CoordinatorLayout
(例如,在使用ConstraintLayout
时,将其绑定到父级的底部)。
接下来,将CoordinatorLayout
的ID提供给Snackbar.make(...)
函数(或CoordinatorLayout
中的任何子项)。
小吃栏将从当前的视图迭代视图,直到找到CoordinatorLayout
并将其自身附加到其上。