Переопределите onCancel в BottomSheetFragment, чтобы установить для состояния значение COLLAPSED.
Я пытаюсь реализовать BottomSheet с помощью BottomSheetFragment, который сворачивается, когда пользователь щелкает вне диалогового окна. Я пробовал переопределитьonCancel
но установить состояние на STATE_COLLAPSED
, но это не работает - BottomSheet исчезает при нажатии снаружи. Также естьsetHideable(false)
. Итак, я ожидаю, что нижний лист схлопнется, когда пользователь щелкнет наружу, а это не так. Как я могу этого добиться?
public class MyBottomSheet extends BottomSheetDialogFragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.eazyotp_auto_capture_bottomsheet, container, false);
}
@Override
public void onCancel(@NonNull DialogInterface dialog) {
super.onCancel(dialog);
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); // does not work
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
behavior = getDialog().getBehavior();
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
behavior.setHideable(false);
behavior.setPeekHeight(70);
// following works well - even when user drags the bottomsheet it gets into collapsed state.
imageView.setOnClickListener(v -> {
if(behavior.getState() == BottomSheetBehavior.STATE_EXPANDED)
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
else
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
});
}
}
Также когда я делаю setCancelable(false)
, Я не могу использовать свертывание / развертывание imageView
1 ответ
Добавить это в activityCreted getDialog().setCanceledOnTouchOutside(true)