RoboSwag/alerts/README.md

4.3 KiB
Raw Blame History

alerts

Общее описание

Модуль содержит: AlertDialogManager - служит для демонстрации AlertDialog с использованием View, необходимо вызвать метод showAlertDialog, который в качестве агруметов может принимать:

  • context
  • style - стиль для элементов дефолтного диалога (по умолчанию R.style.AlertDialogDefault)
  • title - Заголовок диалога
  • message - дополнительное сообщение
  • positiveButtonText - текст правой кнопки (по умолчанию "ОК")
  • onPositiveAction - колбэк при нажатии на правую кнопку
  • negativeBtnTitle - текст левой кнопки (по умолчаннию null - в этом случаи не отображается)
  • onNegativeAction - колбэк при нажатии на левую кнопку,
  • dialogLayout - id кастомного layout (по умолчанию R.layout.dialog_alert)

ComposableAlertDialog - служит для демонстрации AlertDialog с использованием Jetpack Compose, необходимо вызвать метод ShowAlertDialog, который в качестве агруметов может принимать:

  • isDialogOpen - индикатор состояния диалога
  • title - Заголовок диалога
  • message - дополнительное сообщение
  • positiveButtonText - текст правой кнопки
  • onPositiveAction - колбэк при нажатии на правую кнопку
  • negativeBtnTitle - текст левой кнопки (по умолчаннию null - в этом случаи не отображается)
  • onNegativeAction - колбэк при нажатии на левую кнопку,

Кастомизация Compose версии происходит по средствам инициализации полей: customTitle, customMessage, customConfirmBtn, customNegativeBtn

Примеры

View версия (ViewableAlertDialog) ok/cancel диалога:

alertDialogManager.showAlertDialog(
                activity,
                title = "Ой, что-то пошло не так",
                message = "Попробуйте ещё раз",
                positiveButtonText = "Ещё раз",
                onPositiveAction = { retryConnection() }, 
                negativeBtnTitle = "Отмена"
            )

View версия (ViewableAlertDialog) ok диалога:

alertDialogManager.showOkDialog(
        dialog?.window?.decorView?.context ?: throw Exception(),
        title = "Необходимо изменить настройки",
        okButtonText = "Ок",
        onOkAction = {
            viewModel.dispatchAction(ItemAction.ChangeSettings)
        }
)

Для катомизации стилей элементов в дефолтной разметке диалога необходимо создать стиль - наследника от ThemeOverlay.MaterialComponents.MaterialAlertDialog и переопределить стили:

  • materialAlertDialogTitleTextStyle - стиль для заголока (наследник от MaterialAlertDialog.MaterialComponents.Title.Text)
  • materialAlertDialogBodyTextStyle - стиль для подзаголовка (наследник от MaterialAlertDialog.MaterialComponents.Body.Text)
  • buttonBarPositiveButtonStyle - стиль для позитивной кнопки (наследник от Widget.MaterialComponents.Button.TextButton.Dialog)
  • buttonBarNegativeButtonStyle - стиль для негативной кнопки (наследник от Widget.MaterialComponents.Button.TextButton.Dialog)

Compose версия (ComposableAlertDialog):

val isDialogOpen = remember { mutableStateOf(false)}
....
//Создание диалога
ComposableAlertDialog
            .apply { customTitle = { Text(text = "Ой, что-то пошло не так", color = Color.Blue) } }
            .ShowAlertDialog(isDialogOpen, message = "Проблемы с сетью", positiveButtonText = "ОК")
....
//Отображение диалога
isDialogOpen.value = true