Ограничьте максимальную высоту расширения для BottomSheetDialogFragmentAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Ограничьте максимальную высоту расширения для BottomSheetDialogFragment

Сообщение Anonymous »

На данный момент мы реализовали следующие компоненты пользовательского интерфейса:
  • BottomSheetDialogFragment
  • NestedScrollView
  • EditText
Текущее поведение показано на снимке экрана ниже.
Изображение


По мере ввода пользователем высота BottomSheetDialogFragment увеличивается. Если пользователь продолжает вводить текст, высота BottomSheetDialogFragment увеличится до тех пор, пока не заполнит весь экран.
Изображение


Однако вместо того, чтобы разворачиваться на весь экран, нам нужен BottomSheetDialogFragment для увеличения высоты только до определенной точки, после чего он должен остановиться, чтобы не допустить закрытия всего экрана. Это желаемое поведение показано на следующем снимке экрана. После этого момента, если пользователь продолжает печатать, NestedScrollView должен стать прокручиваемым.
[img]https://i .stack.imgur.com/CC4MP.png[/img]


Есть ли у вас идеи, как этого можно добиться? >
Ниже представлена ​​текущая реализация исходного кода.
todo_input_dialog_fragment.xml













TodoInputDialogFragment.kt
class TodoInputDialogFragment : BottomSheetDialogFragment() {
private var _binding: TodoInputDialogFragmentBinding? = null

// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!

private var keyboardVisible = false

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = TodoInputDialogFragmentBinding.inflate(inflater, container, false)

val root: View = binding.root

// https://stackoverflow.com/questions/649 ... t-windowin
ViewCompat.setOnApplyWindowInsetsListener(root) { _, insets ->

// https://stackoverflow.com/a/63595830/72437
val currKeyboardVisible = insets.isVisible(WindowInsetsCompat.Type.ime())
if (!currKeyboardVisible && (this.keyboardVisible != currKeyboardVisible)) {
dismiss()
}
this.keyboardVisible = currKeyboardVisible

insets
}

binding.submitButton.setOnClickListener {
submit()
}

return root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

focusAndShowKeyboard(requireActivity(), binding.editText)
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState)

// https://stackoverflow.com/questions/649 ... t-windowin
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
dialog.window?.also {
it.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
}
}

// https://stackoverflow.com/questions/468 ... t-dragging
//dialog.setOnShowListener { dialogInterface ->
// val bottomSheet = dialog.findViewById(com.google.android.material.R.id.design_bottom_sheet)
//
// if (bottomSheet != null) {
// val behavior: BottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
// behavior.isDraggable = false
// }
//}

return dialog
}

override fun getTheme(): Int {
return com.yocto.wetodo.R.style.TodoInputDialogFragmentStyle
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}

private fun submit() {
}
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... ogfragment
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»