Диалоги — это часть разработки Android, они действительно ее часть. Вы просто не можете обойтись без них или, может быть, могли бы. Но что, если бы был только этот диалог, который вы могли бы использовать для всего, от подтверждения, проверки, информации или прогресса (мне действительно нужно было закончить рифму, но это означает, что нужно показать прогресс, как в ProgreesDialog).

Ну, я придумал один такой диалог, который я называю QuickDialog.

Быстрый диалог

Быстрый диалог просто дает вам несколько согласованных вариантов диалогов, которые вам нужны в вашем приложении для Android.

  • Диалоговое окно сообщений
  • Диалог прогресса
  • Диалоговое окно предупреждений
  • Диалоговое окно ввода

Быстрый старт

Добавьте его в корневой файл build.gradle в конце репозиториев:

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

Добавьте зависимость

dependencies {
 implementation ‘com.github.billkainkoom:quickdialog:v0.70’
}

Диалоговое окно сообщений

Диалог сообщения просто отображает изображение с помощью одной кнопки.

QuickDialog(
               context = this,
               style = QuickDialogType.Message,
               title = "Hello World",
               message = "The quick dialog jumped over the old dialog",
               image = R.drawable.ic_info_outline_black_24dp)
               .overrideButtonNames("OK" ).overrideClicks({ ->
                   Toast.makeText(context, "Clicked on OK", Toast.LENGTH_SHORT).show()
               }).show()

Диалоговое окно прогресса показывает циклический прогресс в неопределенном состоянии с кнопкой или без нее.

QuickDialog(
               context = context,
               style = QuickDialogType.Progress,
               title = "Please wait",
               message = "Walking round the world")
               .show()

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

QuickDialog(
               context = context,
               style = QuickDialogType.Progress,
               title = "Please wait",
               message = "Walking round the world")
               .overrideButtonNames("Hide Progress")
               .overrideClicks({ ->
                   Toast.makeText(context, "Clicked on Hide Progress", Toast.LENGTH_SHORT).show()
               }).showPositiveButton()
               .show()

Диалоговое окно предупреждений

Диалоговое окно с предупреждением используется в ситуациях, когда пользователю необходимо принять решение.

QuickDialog(
                context = context,
                style = QuickDialogType.Alert,
                title = "Proceed",
                message = "Do you want to take this action")
                .overrideButtonNames("Yes", "No")
                .overrideClicks(positiveClick = { ->
                    Toast.makeText(context, "Yes", Toast.LENGTH_SHORT).show()
                }, negativeClick = { ->
                    Toast.makeText(context, "No", Toast.LENGTH_SHORT).show()
                })
                .show()

OverrideClicks появляется в трех формах

Переопределениекликов №1

fun overrideClicks(
           positiveClick: () -> Unit = {},
           negativeClick: () -> Unit = {},
           neutralClick: () -> Unit = {}
   )

Переопределитьклики №2

fun overrideClicks(
           positiveClick: (dismiss: () -> Unit) -> Unit = { d -> },
           negativeClick: (dismiss: () -> Unit) -> Unit = { d -> },
           neutralClick: (dismiss: () -> Unit) -> Unit = { d -> }
   )

Переменная d — это анонимная функция, которая передается из реализации функции overideClicks. Это функция закрытия в QuickDialog, которая помогает вам закрыть диалоговое окно при закрытии клика. Все перегруженные методы с dsupplied не закрываются автоматически.

Давайте посмотрим пример

QuickDialog(
               context = context,
               style = QuickDialogType.Alert,
               title = "Proceed",
               message = "Do you want to take this action")
               .overrideButtonNames("Yes", "No")
               .overrideClicks(positiveClick = { dismiss ->
                   if (true) {
                       Toast.makeText(context, "Yes", Toast.LENGTH_SHORT).show()
                       dismiss()
                   }
               }, negativeClick = { dismiss ->
                   if (true) {
                       Toast.makeText(context, "No", Toast.LENGTH_SHORT).show()
                       dismiss()
                   }
               })
               .show()

Если мы не вызовем команду «Отклонить», диалоговое окно «Быстрый доступ» не исчезнет.

Переопределение кликов № 3

fun overrideClicks(
           positiveClick: (dismiss: () -> Unit, inputText: String) -> Unit = { d, s -> },
           negativeClick: (dismiss: () -> Unit, inputText: String) -> Unit = { d, s -> },
           neutralClick: (dismiss: () -> Unit, inputText: String) -> Unit = { d, s -> }
   )

d такой же, как описано выше. Однако s — это текст, введенный пользователем в варианте WithInput QuickDialog.

Диалоговое окно с вводом

Я согласен, что это странное имя, но оно предназначено для проверки, типа, когда вам обычно нужно ввести какой-то код.

давайте посмотрим пример

QuickDialog(
               context = context,
               style = QuickDialogType.WithInput,
               title = "Verify Code",
               message = "Please verify the SMS code that was sent to you")
               .overrideButtonNames("Verify", "Cancel", "Re-send")
               .overrideClicks(positiveClick = { dismiss, inputText ->
                   if (inputText.length < 3) {
                       Toast.makeText(context, "Please enter a 4 digit code", Toast.LENGTH_SHORT).show()
                   } else if (inputText == "4000") {
                       Toast.makeText(context, "Verified", Toast.LENGTH_SHORT).show()
                       dismiss()
                   } else {
                       Toast.makeText(context, "You entered the wrong code", Toast.LENGTH_SHORT).show()
                   }
               }, negativeClick = { dismiss, inputText ->
                   dismiss()
               }, neutralClick = { dismiss, inputText ->
                   //Your action
                   dismiss()
               })
               .withInputHint("Code")
               .withInputLength(4)
               .withInputType(InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL)
               .showNeutralButton()
               .show()

Вы можете найти QuickDialog на GitHub, перейдя по этой ссылке

https://github.com/billkainkoom/quickdialog/