그래서 기본 콜백 코드와 콜백 커스터마이징을 제외하고는 기본적으로 아무것도 수행하지 않는 커스텀 클래스를 만들었습니다. 어떤 이유로 든 하단 시트의 테두리 바깥을 만지면 취소 할 수 없습니다.맞춤 BottomSheetDialog 클래스를 사용하면 취소 할 수 없습니다 .Outsideside to
public class CustomBottomSheetDialog extends AppCompatDialog {
public CustomBottomSheetDialog(Context context) {
super(context, R.style.Theme_Design_Light_BottomSheetDialog);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
@Override
public void setContentView(View view) {
final CoordinatorLayout coordinator = (CoordinatorLayout) View.inflate(getContext(),
R.layout.design_bottom_sheet_dialog, null);
FrameLayout bottomSheet = (FrameLayout) coordinator.findViewById(R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setBottomSheetCallback(mBottomSheetCallback);
bottomSheet.addView(view);
super.setContentView(coordinator);
}
private BottomSheetBehavior.BottomSheetCallback mBottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
cancel(); // The only not boilerplate code here, woo
}
}
@Override
public void onSlide(View bottomSheet, float slideOffset) { }
};
것들 나는 시도했다 :
bottomSheetDialog.setCancelable (TRUE);
bottomSheetDialog.setCanceledOnTouchOutside (true);
dispatchTouchEvent를 (를) 재정의하지만 전체 화면 크기 이외의 다른 항목과 동일한 사각형을 가져올 수 없습니다.
사용자 정의 클래스를 사용하지 않으면 (예 : BottomSheetDialog에 대한 CustomBottomSheetDialog 호출 만 변경하면), 터치시 취소가 발생하지만 드래그하여 대화 상자를 숨길 때 취소되지 않습니다. 가지고 있어야합니다.