Состояние набора BottomSheetDialogFragment к расширенному

Как Вы устанавливаете состояние расширения фрагмента BottomSheetDialogFragment к расширенному использованию BottomSheetBehavior#setState(STATE_EXPANDED) пользование Библиотекой Дизайна Поддержки Android (v23.2.1)?

https://code.google.com/p/android/issues/detail? id=202396 говорит:

Нижние листы установлены на STATE_COLLAPSED сначала. Назовите BottomSheetBehavior#setState (STATE_EXPANDED), если Вы хотите развернуть его. Обратите внимание, что Вы не можете назвать метод перед разметками представления.

Предложенная практика требует, чтобы представление было расширено сначала, но я не уверен, как я установлю BottomSheetBehaviour на фрагмент (BottomSheetDialogFragment).

View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);  
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);  

61
задан 11 March 2016 в 13:16

2 ответа

Я думаю, что те, которые выше, лучше. Печально я не нашел их решением, прежде чем я решил. Но запишите мое решение. весьма схожий со всеми.

==================================================================================

я сталкиваюсь с той же проблемой. Это - то, что я решил. Поведение скрыто в BottomSheetDialog, который доступен для получения поведения, Если требуется не изменить родительское расположение, чтобы быть CooridateLayout, можно попробовать это.

ШАГ 1: настройте шаг 2 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
   }
}

: заставьте свой фрагмент расширить этот специализированный фрагмент

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()
   }
}
2
ответ дан 31 October 2019 в 14:51

Подобный ответ uregentx, в [1 114] kotlin, можно объявить класс фрагмента, который расширяется от BottomSheetDialogFragment, и когда представление создается, можно установить диалоговое состояние по умолчанию слушателя после того, как диалоговое окно отображено.

STATE_COLLAPSED: нижний лист видим, но только показывает свою высоту быстрого взгляда.

STATE_EXPANDED: нижний лист видим и его максимальная высота.

STATE_HALF_EXPANDED: нижний лист видим, но только показывает свою половину высоты.

    class FragmentCreateGroup : BottomSheetDialogFragment() {
          ...

        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
            // Set dialog initial state when shown
            dialog?.setOnShowListener {
                val bottomSheetDialog = it as BottomSheetDialog
                val sheetInternal: View = bottomSheetDialog.findViewById(com.google.android.material.R.id.design_bottom_sheet)!!
                BottomSheetBehavior.from(sheetInternal).state = BottomSheetBehavior.STATE_COLLAPSED
            }

            val view = inflater.inflate(R.layout.fragment_create_group, container, false)
            ...

            return view
        }
    }

Не забывают использовать существенную реализацию дизайна в gradle.

implementation "com.google.android.material:material:$version"

Также смотрят к существенной ссылке дизайна Нижние Листы

1
ответ дан 31 October 2019 в 14:51

Другие вопросы по тегам:

Похожие вопросы: