したがって、コールバックのカスタマイズと定型的なコードを除いて基本的に何もしないカスタムクラスを作成しました。何らかの理由で、ボトムシートの範囲外に触れるとキャンセルできないようです。私が試したカスタムBottomSheetDialogクラスを使用するとキャンセルできません。
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(真の);
bottomSheetDialog.setCanceledOnTouchOutside(true);
dispatchTouchEventをオーバーライドしますが、画面全体のサイズ以外の矩形を取得できません。
カスタムクラスを使用しない場合(つまり、単にBottomSheetDialogだけのCustomBottomSheetDialog呼び出しを変更する場合)、私は外部のタッチでキャンセルを取得しますが、ドラッグしてダイアログを非表示にするとキャンセルされません持つ必要があります。