Resumen
Muchas apps muestran un diseño distinto en una tableta que en un teléfono. Deducir la clase de dispositivo a partir del tamaño de pantalla no es fiable: el resultado puede cambiar con la orientación, el escalado de pantalla o el tamaño de la ventana.
KlugDeviceType pregunta al propio sistema operativo. En Android usa el ancho de pantalla más pequeño del dispositivo en píxeles independientes de la densidad (600 dp o más es una tableta), la misma regla que usa Android para sus propios diseños. En iOS usa el idiom de dispositivo del sistema, que distingue un iPad de un iPhone.
La respuesta es la misma en vertical y en horizontal, independiente de cómo tu app escale su contenido, desde el primer fotograma de la app.
Funciones
- Autónoma: una ANE, sin biblioteca central ni ANE de dependencias que añadir
- Teléfono o tableta, según responde el sistema operativo
- Estable ante la orientación y el escalado de la app
- El ancho de pantalla más pequeño en dp (puntos en iOS), para tus propios umbrales
- Disponible al iniciar la app, antes del primer diseño
- No requiere permisos
Plataformas compatibles
En otras plataformas isSupported devuelve false y deviceType es una cadena vacía.
Primeros pasos
Añade la extensión al descriptor de tu aplicación:
<extensions>
<extensionID>com.klug.devicetype</extensionID>
</extensions>
Ejemplos de código
Tres flujos completos. Los getters devuelven de inmediato y no requieren permisos; cada lectura vuelve a consultar al sistema operativo. Documentación completa →
import com.klug.devicetype.DeviceType; var type:DeviceType = DeviceType.getInstance(); // the same answer in portrait and landscape, available before the first layout if ( !type.isSupported ) useDesktopLayout(); // other platforms: deviceType is "" else if ( type.isTablet ) useTabletLayout(); // Android: 600 dp or more · iOS: iPad else usePhoneLayout();
// dp on Android, points on iOS; -1 where not available var sw:int = type.smallestWidthDp; var columns:int; if ( sw >= 720 ) columns = 3; // large tablet else if ( sw >= 600 ) columns = 2; // small tablet else columns = 1; // phone, or -1: not available buildGrid( columns );
import flash.events.Event; var current:String = type.deviceType; // every read asks the system again, nothing is cached stage.addEventListener( Event.RESIZE, function( e:Event ):void { var now:String = type.deviceType; if ( now == current ) return; // a rotation alone never changes it current = now; rebuildLayout( now ); // Android: opening a foldable can turn "phone" into "tablet" }); // iOS: isTablet follows the device (iPad) and does not change; // smallestWidthDp follows the screen the app is shown on
Resumen de la API
| DeviceType.getInstance() | Devuelve la instancia única. |
| isSupported | Verdadero en Android e iOS. |
| isTablet | Verdadero en una tableta: Android 600 dp o más, iPad en iOS; falso en otras plataformas. |
| isPhone | Verdadero en un teléfono; falso en otras plataformas. |
| deviceType | "tablet" o "phone"; una cadena vacía en otras plataformas. |
| smallestWidthDp | La menor de las dimensiones de pantalla: dp en Android, puntos en iOS; -1 donde no esté disponible. |
Compra KlugDeviceType
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
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Sin soporte
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Respuesta por e-mail en un plazo de 7 días
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Respuesta por e-mail en un plazo de 48 horas
Requisitos
| AIR SDK | 51.x (HARMAN) |
| iOS | iOS 17 o posterior |
| Android | Android 6.0 (API 23) o posterior |
| Permisos | Ninguno |