Oversigt
Mange apps viser et andet layout på en tablet end på en telefon. At gætte enhedsklassen ud fra skærmstørrelsen er upålideligt: resultatet kan ændre sig med orientering, skærmskalering eller vinduets størrelse.
KlugDeviceType spørger selve operativsystemet. På Android bruger den enhedens mindste skærmbredde i densitetsuafhængige pixels (600 dp eller mere er en tablet), den samme regel som Android bruger til sine egne layouts. På iOS bruger den systemets device idiom, som skelner en iPad fra en iPhone.
Svaret er det samme i portræt og landskab, uafhængigt af hvordan din app skalerer sit indhold, fra appens allerførste frame.
Funktioner
- Selvstændig: én ANE, intet kernebibliotek eller afhængige ANE'er at tilføje
- Telefon eller tablet, besvaret af operativsystemet
- Stabil på tværs af orientering og appskalering
- Den mindste skærmbredde i dp (points på iOS), til dine egne tærskler
- Tilgængelig ved appstart, før det første layout
- Ingen tilladelse nødvendig
Understøttede platforme
På andre platforme returnerer isSupported false, og deviceType er en tom streng.
Kom i gang
Tilføj udvidelsen til din applikationsdescriptor:
<extensions>
<extensionID>com.klug.devicetype</extensionID>
</extensions>
Kodeeksempler
Tre komplette flows. Gettere vender straks tilbage og kræver ingen tilladelse; hver læsning spørger operativsystemet igen. Fuld dokumentation →
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
API-oversigt
| DeviceType.getInstance() | Returnerer den enkelte instans. |
| isSupported | Sand på Android og iOS. |
| isTablet | Sand på en tablet: Android 600 dp eller mere, iOS iPad; falsk på andre platforme. |
| isPhone | Sand på en telefon; falsk på andre platforme. |
| deviceType | "tablet" eller "phone"; en tom streng på andre platforme. |
| smallestWidthDp | Den mindste skærmdimension: dp på Android, points på iOS; -1, hvor den ikke er tilgængelig. |
Køb KlugDeviceType
En årlig licens til én AIR-applikation, med alle opdateringer i 12 måneder. Efter betaling modtager du udvidelsen, ActionScript-biblioteket og dokumentationen pr. e-mail, normalt inden for én hverdag. Licens og vilkår
- Licens til én AIR-applikation
- Alle opdateringer i 12 måneder
- Svar pr. e-mail inden for 7 dage
- Licens til én AIR-applikation
- Alle opdateringer i 12 måneder
- Svar pr. e-mail inden for 48 timer
Krav
| AIR SDK | 51.x (HARMAN) |
| iOS | iOS 17 eller nyere |
| Android | Android 6.0 (API 23) eller nyere |
| Tilladelser | Ingen |