← Todas las extensiones

Extensión nativa

KlugDialog

com.klug.dialog.Dialog

NO NECESITAS APM. Descarga y disfruta. No puede ser más sencillo.

Diálogos nativos para apps AIR en Android, iOS y macOS: alertas, diálogos con campos de texto que permanecen sobre el teclado y un diálogo de progreso que tu código actualiza y cierra.

AndroidiOSmacOS En producción Desde €19 / año · Comprar

Resumen

La alerta integrada de AIR en el Mac parece de otra década. KlugDialog muestra la auténtica: hojas de alerta nativas de macOS ancladas a la ventana de tu app, con el icono de la app, la fuente del sistema y los estilos de botón habituales.

Más allá de las alertas sencillas, cubre lo que las apps de escritorio necesitan a diario: diálogos con campos de texto (por ejemplo nombre de usuario y contraseña, también como campos seguros), varios botones con sus propios estilos y una hoja de progreso ("Conectando…") que tu código actualiza y cierra cuando termina el trabajo.

Todo es asíncrono: show() devuelve de inmediato y tu callback recibe el botón elegido. KlugDialog funciona en la versión para Mac de nuestras apps, nuestra prueba de concepto.

Novedad en Android: los mismos diálogos como diálogos nativos de Android. Los campos de texto permanecen sobre el teclado en todas las pantallas, también en horizontal en tabletas, donde antes los botones desaparecían detrás de él; las contraseñas, los nombres de usuario y las direcciones de e-mail nunca se ponen en mayúscula automáticamente, y los campos de e-mail obtienen el teclado de e-mail. La versión para Android también apila listas largas de botones, ofrece un spinner sencillo y funciona en la versión Android de nuestras apps.

También en iOS: desde la versión 1.2, la misma API muestra alertas nativas de iOS, diálogos con campos de texto y un diálogo de progreso, de modo que una sola ruta de código sirve para Android, iOS y macOS.

Funciones

  • Autónoma: una ANE, sin biblioteca central ni ANE de dependencias que añadir
  • Hojas de alerta nativas de macOS con hasta tres botones
  • Estilos informativo, de advertencia y crítico
  • Diálogos con cualquier número de botones y campos de texto, incluidos campos seguros
  • Hoja de progreso que se puede actualizar y cerrar desde el código
  • Los diálogos se pueden cerrar desde el código
  • Callbacks con el botón elegido y los valores introducidos
  • Android: campos sobre el teclado, sin contraseñas en mayúscula automática, teclados de e-mail / numéricos, tema claro y oscuro

Plataformas compatibles

Android alertas · campos de texto · progreso · listas largas de botones
iOS arm64 · alertas · campos de texto · progreso
macOS arm64 · x86_64

En otras plataformas isSupported devuelve false, para que tu app pueda recurrir allí a sus diálogos habituales.

Primeros pasos

Añade la extensión al descriptor de tu aplicación:

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

Ejemplos de código

Cinco flujos completos. Cada llamada devuelve de inmediato; el resultado llega más tarde en tu callback, de modo que la app nunca se bloquea mientras hay un diálogo abierto. Documentación completa →

1 · Comprobar la compatibilidad y mostrar una alerta sencilla
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 · Hacer una pregunta con hasta tres botones
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 · Diálogo de inicio de sesión con campos de texto
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 · Diálogo de progreso mientras tu código trabaja
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 · Cerrar un diálogo desde el código
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" );

Resumen de la API

Dialog.getInstance()Devuelve la instancia única.
isSupportedVerdadero en Android, iOS y macOS; falso en el resto, por ejemplo en Windows.
show(title, message, buttons, callback, style)Alerta con hasta tres botones (por defecto "OK"); callback(index), -1 si se cerró sin pulsar un botón. Devuelve false si no es compatible.
present(title, message, cancelable, buttons, fields, callback, id, theme)Diálogo con cualquier número de botones y campos de texto; callback(tag, values, cancelled). Pasa tu propio id para cerrarlo más tarde; theme "light" o "dark" en Android e iOS.
presentDismiss(id)Cierra un diálogo de present() desde el código; no se dispara ningún callback.
progressShow(id, title, message, cancelable, closeCallback, theme)Diálogo de progreso con un spinner; closeCallback se dispara una vez cuando desaparece.
progressUpdate(id, message) / progressDismiss(id)Cambia el texto del diálogo de progreso / lo cierra.
STYLE_INFO, STYLE_WARNING, STYLE_CRITICALEstilos de alerta para show(), usados por la hoja de alerta de macOS.
Button {label, style, tag}style: 0 predeterminado, 1 positivo, 2 negativo, 3 destructivo, 4 cancelar, 5 neutro. Android usa todos, iOS usa 3 y 4, macOS muestra todos los botones por igual.
Field {placeholder, secure, text, keyboardType, autocorrect, autocap}keyboardType: 0 predeterminado, 3 URL, 4 número, 5 teléfono, 7 e-mail, 8 decimal. autocap: 0 ninguna (por defecto), 1 oraciones, 2 palabras, 3 todo. Los tres últimos se aplican en Android e iOS.

Compra KlugDialog

Una licencia anual para una aplicación AIR, con todas las actualizaciones durante 12 meses. Tras el pago recibes la extensión, la biblioteca ActionScript y la documentación por e-mail, normalmente en un día hábil. Licencia y términos

Simple
€19 / año
  • Licencia para una aplicación AIR
  • Todas las actualizaciones durante 12 meses
  • Sin soporte
Comprar Simple
Standard
€149 / año
  • Licencia para una aplicación AIR
  • Todas las actualizaciones durante 12 meses
  • Respuesta por e-mail en un plazo de 7 días
Comprar Standard
Priority
€299 / año
  • Licencia para una aplicación AIR
  • Todas las actualizaciones durante 12 meses
  • Respuesta por e-mail en un plazo de 48 horas
Comprar Priority
Link (Stripe) calcula los impuestos al pagar. Durante el pago indicas el ID de aplicación de tu app AIR.

Requisitos

AIR SDK51.x (HARMAN)
AndroidAndroid 6 o posterior
iOSiOS 13 o posterior
macOSmacOS 11 o posterior