Обзор
Встроенное уведомление AIR на Mac выглядит так, будто пришло из другой эпохи. KlugDialog показывает настоящее: нативные листы уведомлений macOS, прикреплённые к окну вашего приложения, со значком приложения, системным шрифтом и привычными стилями кнопок.
Помимо простых уведомлений он покрывает то, что нужно настольным приложениям каждый день: диалоги с текстовыми полями (например, имя пользователя и пароль, в том числе как защищённые поля), несколько кнопок с собственными стилями и лист прогресса («Подключение…»), который ваш код обновляет и закрывает, когда работа завершена.
Всё асинхронно: show() возвращается сразу, а ваш обратный вызов получает выбранную кнопку. KlugDialog работает в версии наших приложений для Mac, нашем доказательстве работоспособности.
Новинка на Android: те же диалоги в виде нативных диалогов Android. Текстовые поля остаются над клавиатурой на любом экране, в том числе в альбомной ориентации на планшетах, где раньше кнопки скрывались за ней; пароли, имена пользователей и адреса e-mail никогда не пишутся автоматически с заглавной буквы, а поля e-mail получают клавиатуру для e-mail. Версия для Android также выстраивает длинные списки кнопок в столбец, предлагает простой спиннер и работает в версии наших приложений для Android.
Также на iOS: начиная с версии 1.2 тот же API показывает нативные уведомления iOS, диалоги с текстовыми полями и диалог прогресса, так что один путь кода обслуживает Android, iOS и macOS.
Возможности
- Автономность: один ANE, без базовой библиотеки и зависимых ANE
- Нативные листы уведомлений macOS с числом кнопок до трёх
- Информационный, предупреждающий и критический стили
- Диалоги с любым числом кнопок и текстовых полей, включая защищённые поля
- Лист прогресса, который можно обновлять и закрывать из кода
- Диалоги можно закрывать из кода
- Обратные вызовы с выбранной кнопкой и введёнными значениями
- Android: поля над клавиатурой, пароли без автоматических заглавных, клавиатуры для e-mail / чисел, светлая и тёмная темы
Поддерживаемые платформы
На других платформах isSupported возвращает false, поэтому там ваше приложение может вернуться к обычным диалогам.
Начало работы
Добавьте расширение в дескриптор вашего приложения:
<extensions>
<extensionID>com.klug.dialog.Dialog</extensionID>
</extensions>
Примеры кода
Пять полных сценариев. Каждый вызов возвращается сразу; результат приходит позже в вашем обратном вызове, поэтому приложение никогда не блокируется, пока открыт диалог. Полная документация →
import com.klug.dialog.Dialog; var dialog:Dialog = Dialog.getInstance(); if ( dialog.isSupported ) { dialog.show( "Saved", "The recording is in your library." ); // one "OK" button } else { showAppAlert( "Saved" ); // your app's own fallback dialog, e.g. on Windows }
dialog.show( "Delete recording?", "This cannot be undone.", [ "Delete", "Keep" ], function( index:int ):void { // index = position in the buttons array; // -1 = closed without a button, e.g. the Android back key if ( index == 0 ) deleteRecording(); // your app }, Dialog.STYLE_WARNING ); // alert style of the macOS sheet
var buttons:Array = [ { label:"Cancel", style:4, tag:0 }, // style 4 = cancel, 3 = destructive { label:"Sign in", style:0, tag:1 } ]; var fields:Array = [ { placeholder:"E-mail", text:lastEmail, keyboardType:7 }, // 7 = e-mail keyboard { placeholder:"Password", secure:true } // never auto-capitalised ]; dialog.present( "Sign in", "Please enter your account.", true, buttons, fields, function( tag:int, values:Array, cancelled:Boolean = false ):void { if ( cancelled ) return; // closed without a button (tag -1) if ( tag == 1 ) signIn( values[0], values[1] ); // values in field order }, null, "dark" ); // theme on Android and iOS; macOS follows the system
// your own id: the same dialog is updated and closed with it dialog.progressShow( "connect", "Connecting", "Contacting the server…", false, function():void { trace( "progress dialog closed" ); } ); // fires once dialog.progressUpdate( "connect", "Signing in…" ); // when the work is done, or has failed dialog.progressDismiss( "connect" );
// pass your own id as the 7th parameter to close the dialog later dialog.present( "Waiting for the camera", "Tap Cancel to stop waiting.", false, [ { label:"Cancel", style:4, tag:0 } ], null, function( tag:int, values:Array ):void { stopWaiting(); }, // your app "waitCamera" ); // the camera has answered: close the dialog, no callback fires dialog.presentDismiss( "waitCamera" );
Обзор API
| Dialog.getInstance() | Возвращает единственный экземпляр. |
| isSupported | True на Android, iOS и macOS; false на остальных, например на Windows. |
| show(title, message, buttons, callback, style) | Уведомление с числом кнопок до трёх (по умолчанию "OK"); callback(index), -1, если закрыто без кнопки. Возвращает false, если не поддерживается. |
| present(title, message, cancelable, buttons, fields, callback, id, theme) | Диалог с любым числом кнопок и текстовых полей; callback(tag, values, cancelled). Передайте собственный id, чтобы позже закрыть его; тема "light" или "dark" на Android и iOS. |
| presentDismiss(id) | Закрывает диалог present() из кода; обратный вызов не срабатывает. |
| progressShow(id, title, message, cancelable, closeCallback, theme) | Диалог прогресса со спиннером; closeCallback срабатывает один раз, когда диалог исчез. |
| progressUpdate(id, message) / progressDismiss(id) | Изменяет текст диалога прогресса / закрывает его. |
| STYLE_INFO, STYLE_WARNING, STYLE_CRITICAL | Стили уведомлений для show(), используются листом уведомлений macOS. |
| Button {label, style, tag} | style: 0 по умолчанию, 1 положительная, 2 отрицательная, 3 разрушительная, 4 отмена, 5 нейтральная. Android использует все, iOS использует 3 и 4, macOS показывает все кнопки одинаково. |
| Field {placeholder, secure, text, keyboardType, autocorrect, autocap} | keyboardType: 0 по умолчанию, 3 URL, 4 число, 5 телефон, 7 e-mail, 8 десятичное. autocap: 0 нет (по умолчанию), 1 предложения, 2 слова, 3 все. Последние три действуют на Android и iOS. |
Купить KlugDialog
Годовая лицензия на одно приложение AIR со всеми обновлениями в течение 12 месяцев. После оплаты вы получаете расширение, библиотеку ActionScript и документацию по e-mail, обычно в течение одного рабочего дня. Лицензия и условия
- Лицензия на одно приложение AIR
- Все обновления в течение 12 месяцев
- Без поддержки
- Лицензия на одно приложение AIR
- Все обновления в течение 12 месяцев
- Ответ по e-mail в течение 7 дней
- Лицензия на одно приложение AIR
- Все обновления в течение 12 месяцев
- Ответ по e-mail в течение 48 часов
Требования
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6 или новее |
| iOS | iOS 13 или новее |
| macOS | macOS 11 или новее |