似乎BottomSheetDialogFragment是用锚编码的,如果您的片段布局高度超过360dp
,onShow()
会使对话框窥视到360dp
,则您必须手动拖动工作表来显示您的所有布局。
是否有任何方法可以绕过此行为或针对我可以使用片段的模式底部对话框的任何其他建议?
您可以按照以下方式检查行为
Activity.java
MyDialog myDialog = new MyDialog();
mtDialog.show(getChildFragmentManager(),"my_dialog_fragment");
MyDialog.java
public class MyDialog extends BottomSheetDialogFragment{
public View onCreate(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState){
return inflater.inflate(R.layout.dialog, container, false);
}
}
dialog.xml
<FrameLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="432dp"
android:backgroud="@color/blue"/>
几乎就是代码。我尝试使用setStyle
并创建BottomSheetDialog样式以及所有这些排列和填充。但是将高度设置为360dp可以完全展开,但是我需要更多区域。
答案 0 :(得分:1)
在这里回答问题。
public class MyDialogFragment extends BottomSheetDialogFragment {
@Override
public void setupDialog(Dialog dialog, int style) {
View v = LayoutInflater.from(getActivity()).inflate(R.layout.dialog, null);
dialog.setContentView(v);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) v.getParent()).getLayoutParams();
CoordinatorLayout.Behavior behavior = params.getBehavior();
((BottomSheetBehavior) behavior).setState(BottomSheetBehavior.STATE_EXPANDED);
}
以上内容解决了无法扩展到布局中声明的最大高度的问题。可能想对行为进行检查,以确保其不为null。现在只需添加我的算法,不确定是否需要将其放在oncreateview或设置对话框中即可...我们将看到。
快乐编码:)