Ответ 1
Вы можете использовать эту библиотеку с открытым исходным кодом и посмотреть на лист меню, который делает то же самое или посмотреть, как это делается, и сделать ваш
Как можно создать модальный BottomSheetDialog(Fragment)
который переключается в полноэкранный режим с помощью панели инструментов, как показано в спецификации дизайна материала?
Я мог бы добавить BottomSheetBehavior.BottomSheetCallback
вручную, добавив BottomSheetBehavior.BottomSheetCallback
и установив альфа BottomSheetBehavior.BottomSheetCallback
в зависимости от slideOffset. Это немного глупо, но, кажется, работает, когда перемещаете Нижний лист. Однако это не работает, когда мой нижний лист содержит EditText
и отображается клавиатура. Я попробовал обе версии: BottomSheetDialogFragment
и вручную добавил поведение в новый фрагмент.
Вы можете использовать эту библиотеку с открытым исходным кодом и посмотреть на лист меню, который делает то же самое или посмотреть, как это делается, и сделать ваш
Проверьте этот репозиторий
https://github.com/material-components/material-components-android
ссылка с https://material.io/develop/. это официально
Я совершенно новый для Android, но все еще проверить это. Надеюсь, это поможет вам:
// The View with the BottomSheetBehavior
View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// React to state change
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
}
});
Вы можете прочитать больше об этом здесь: Ссылка на приведенный выше код
Я сталкиваюсь с той же проблемой. Это то, что я решил. Поведение скрыто в BottomSheetDialog, который доступен для определения поведения. Если вы не хотите менять свой родительский макет на CooridateLayout, вы можете попробовать это.
ШАГ 1: настроить BottomSheetDialogFragment
open class CBottomSheetDialogFragment : BottomSheetDialogFragment() {
//wanna get the bottomSheetDialog
protected lateinit var dialog : BottomSheetDialog
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
return dialog
}
//set the behavior here
fun setFullScreen(){
dialog.behavior.state = STATE_EXPANDED
}
}
ШАГ 2: заставьте свой фрагмент расширить этот фрагмент
class YourBottomSheetFragment : CBottomSheetDialogFragment(){
//make sure invoke this method after view is built
//such as after OnActivityCreated(savedInstanceState: Bundle?)
override fun onStart() {
super.onStart()
setFullScreen()//initiated at onActivityCreated(), onStart()
}
}