我想做的事
在 aBottomSheetDialogFragment
中,我想膨胀一个始终停留在屏幕底部的视图,无论它处于什么状态(折叠/展开)BottomSheetBehavior
。
我做了什么
在 的子类中BottomSheetDialogFragment
,我从 XML 扩展视图并将其添加为CoordinatorLayout
(它是BottomSheetDialogFragment
的父级的父级)的子级:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setupBottomBar(getView());
}
private void setupBottomBar (View rootView) {
CoordinatorLayout parentView = (CoordinatorLayout) ((FrameLayout)rootView.getParent()).getParent();
parentView.addView(LayoutInflater.from(getContext()).inflate(R.layout.item_selection_bar, parentView, false), -1);
}
代码运行没有错误。
而当我使用 Layout Inspector 查看 View 层次结构时,视图结构也是正确的:
您也可以在此处下载布局检查器结果,并使用您自己的 Android Studio 打开它。
问题
但是,即使它作为 的最后一个孩子插入CoordinatorLayout
,它仍然被BottomSheetDialogFragment
.
当我慢慢向下滚动BottomSheetDialogFragemnt
(从折叠状态到隐藏状态)时,我终于可以看到我想要在片段后面充气的视图。
为什么会这样?
答案
正如@GoodDev 正确指出的那样,这是因为根视图(design_bottom_sheet)已被设置为 Z 平移BottomSheetDialog
。
这提供了一个重要信息 -不仅视图层次结构中的序列将决定其可见性,而且还决定其 Z 平移。
最好的方法是获取 Z 值design_bottom_sheet
并将其设置为底部栏布局。
private void setupBottomBar (View rootView) {
CoordinatorLayout parentView = (CoordinatorLayout) (rootView.getParent().getParent());
View barView = LayoutInflater.from(getContext()).inflate(R.layout.item_selection_bar, parentView, false);
ViewCompat.setTranslationZ(barView, ViewCompat.getZ((View)rootView.getParent()));
parentView.addView(barView, -1);
}