← Все расширения

Нативное расширение

KlugDialog

com.klug.dialog.Dialog

APM НЕ НУЖЕН. Скачайте и пользуйтесь. Проще уже некуда.

Нативные диалоги для приложений AIR на Android, iOS и macOS: уведомления, диалоги с текстовыми полями, которые остаются над клавиатурой, и диалог прогресса, который ваш код обновляет и закрывает.

AndroidiOSmacOS В продакшене От €19 / год · Купить

Обзор

Встроенное уведомление 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 / чисел, светлая и тёмная темы

Поддерживаемые платформы

Android уведомления · текстовые поля · прогресс · длинные списки кнопок
iOS arm64 · уведомления · текстовые поля · прогресс
macOS arm64 · x86_64

На других платформах isSupported возвращает false, поэтому там ваше приложение может вернуться к обычным диалогам.

Начало работы

Добавьте расширение в дескриптор вашего приложения:

app.xml
<extensions>
    <extensionID>com.klug.dialog.Dialog</extensionID>
</extensions>

Примеры кода

Пять полных сценариев. Каждый вызов возвращается сразу; результат приходит позже в вашем обратном вызове, поэтому приложение никогда не блокируется, пока открыт диалог. Полная документация →

1 · Проверка поддержки и показ простого уведомления
Setup.as
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
}
2 · Вопрос с числом кнопок до трёх
Confirm.as
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
3 · Диалог входа с текстовыми полями
SignIn.as
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
4 · Диалог прогресса, пока работает ваш код
Connect.as
// 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" );
5 · Закрытие диалога из кода
Waiting.as
// 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()Возвращает единственный экземпляр.
isSupportedTrue на 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, обычно в течение одного рабочего дня. Лицензия и условия

Базовый
€19 / год
  • Лицензия на одно приложение AIR
  • Все обновления в течение 12 месяцев
  • Без поддержки
Купить Базовый
Стандартный
€149 / год
  • Лицензия на одно приложение AIR
  • Все обновления в течение 12 месяцев
  • Ответ по e-mail в течение 7 дней
Купить Стандартный
Приоритетный
€299 / год
  • Лицензия на одно приложение AIR
  • Все обновления в течение 12 месяцев
  • Ответ по e-mail в течение 48 часов
Купить Приоритетный
Налоги рассчитываются при оформлении заказа через Link (Stripe). ID приложения вашего приложения AIR вы указываете при оформлении заказа.

Требования

AIR SDK51.x (HARMAN)
AndroidAndroid 6 или новее
iOSiOS 13 или новее
macOSmacOS 11 или новее