"โปรดทราบว่าคุณไม่สามารถเรียกใช้เมธอดก่อนดูเค้าโครง"
ข้อความข้างต้นคือเบาะแส
กล่องโต้ตอบมีตัวฟังที่เริ่มทำงานเมื่อกล่องโต้ตอบปรากฏขึ้น ไม่สามารถแสดงกล่องโต้ตอบได้หากไม่ได้จัดวางไว้
ดังนั้นในonCreateDialog()
แผ่นงานด้านล่างของโมดอล ( BottomSheetFragment
) ก่อนส่งคืนกล่องโต้ตอบ (หรือที่ใดก็ได้เมื่อคุณมีการอ้างอิงถึงกล่องโต้ตอบ) ให้โทร:
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
BottomSheetDialog d = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet)
.setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
ในกรณีของฉันประเพณีของฉันBottomSheet
กลายเป็น:
@SuppressWarnings("ConstantConditions")
public class ShareBottomSheetFragment extends AppCompatDialogFragment {
@NonNull @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog dialog =
new BottomSheetDialog(getActivity(), R.style.Haute_Dialog_ShareImage);
dialog.setContentView(R.layout.dialog_share_image);
dialog.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
BottomSheetDialog d = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
SwitchCompat switchview = (SwitchCompat) dialog.findViewById(R.id.switchview);
switchview.setTypeface(FontCache.get(dialog.getContext(), lookup(muli, NORMAL)));
return dialog;
}
}
โปรดแจ้งให้เราทราบหากสิ่งนี้ช่วยได้
อัปเดต
โปรดทราบว่าคุณสามารถแทนที่BottomSheetDialogFragment
เป็น:
public class SimpleInitiallyExpandedBottomSheetFragment extends BottomSheetDialogFragment {
@NonNull @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
BottomSheetDialog d = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
return dialog;
}
}
แต่ฉันไม่เห็นจริงๆว่าทำไมใคร ๆ ก็อยากทำแบบนั้นเพราะฐานBottomSheetFragment
ไม่ทำอะไรนอกจากส่งกลับ a BottomSheetDialog
.
อัปเดตสำหรับ ANDROIDX
เมื่อใช้ AndroidX ทรัพยากรก่อนหน้านี้ที่พบในขณะนี้สามารถพบได้ที่android.support.design.R.id.design_bottom_sheet
com.google.android.material.R.id.design_bottom_sheet
BottomSheetDialogFragment
(ดูเหมือนจะข้ามเฟรมในภาพเคลื่อนไหวตอนเปิด) เมื่อเปลี่ยนจากพฤติกรรมที่ยุบไปเป็นแบบขยาย แก้ไข: ทดสอบสิ่งนี้บนอุปกรณ์ Android Marshmallow และ KitKat