Достижение плавной прокрутки в EditText с помощью BottomSheetDialogFragment/DialogFragmentAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Достижение плавной прокрутки в EditText с помощью BottomSheetDialogFragment/DialogFragment

Сообщение Anonymous »

Недавно я исследовал приложение, которое, похоже, создано с использованием BottomSheetDialogFragment в сочетании с EditText. Этот выбор дизайна обеспечивает плавную прокрутку, когда объем текста, введенного в EditText, превышает определенный порог. Эта функция особенно эффективна для обеспечения беспрепятственного взаимодействия с пользователем при вводе больших объемов данных.
Плавная прокрутка в EditText
Изображение


Я пытаюсь воспроизвести аналогичный эффект в моем приложении. Ниже приведен код, который я использую для этого:
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/64947700/how-to-adjust-dialog-layout-when-soft-keyboard-appears-using-the-latest-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/64947700/how-to-adjust-dialog-layout-when-soft-keyboard-appears-using-the-latest-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/46861306/how-to-disable-bottomsheetdialogfragment-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.xxx.R.style.TodoInputDialogFragmentStyle
}

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

private fun submit() {
}
}
styles.xml

Код: Выделить всё


@style/BottomSheet_Rounded
adjustResize
false

todo_input_dialog_fragment.xml Однако я изо всех сил пытаюсь добиться эффекта плавной прокрутки в EditText. Несмотря на использование нескольких методов, прокрутка остается нервной и не реагирует на запросы. Есть ли у кого-нибудь предложения, как решить эту проблему?
Лаговая прокрутка в EditText (

Код: Выделить всё

BottomSheetDialogFragment
)
Изображение


Я пробую другую реализацию, используя DialogFragment в сочетании с EditText.
CustomDialogFragment. КТ

Код: Выделить всё

class CustomDialogFragment : DialogFragment() {

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.dialog_custom, container, false)
}

override fun onStart() {
super.onStart()
dialog?.window?.apply {
// Set the layout parameters of the dialog window
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

// Adjust the window to be resized when the keyboard appears
setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
}
}

}
dialog_custom.xml Замедленная прокрутка в EditText (

Код: Выделить всё

DialogFragment
)
Изображение


Знаете, почему это так? Почему некоторые приложения могут обеспечить плавную прокрутку в EditText, когда они используют его с BottomSheetDialogFragment или DialogFragment?

Подробнее здесь: https://stackoverflow.com/questions/783 ... t-dialogfr
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Достижение плавного прокрутки в EditText с помощью нижнего утечка / диалога / диалога
    Anonymous » » в форуме Android
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Как сделать анимацию более плавной/плавной в Xamarin.Ios (C#,Xaml)
    Гость » » в форуме C#
    0 Ответы
    70 Просмотры
    Последнее сообщение Гость
  • Как сделать анимацию более плавной/плавной в Xamarin.Ios (C#,Xaml)
    Anonymous » » в форуме C#
    0 Ответы
    75 Просмотры
    Последнее сообщение Anonymous
  • Как я могу создать эффект плавной прокрутки для ссылок привязки с помощью JavaScript?
    Anonymous » » в форуме CSS
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как я могу создать эффект плавной прокрутки для ссылок привязки с помощью JavaScript?
    Anonymous » » в форуме CSS
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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