Обзор
Многие приложения показывают на планшете другую раскладку, чем на телефоне. Определять класс устройства по размеру экрана ненадёжно: результат может меняться с ориентацией, масштабом дисплея или размером окна.
KlugDeviceType спрашивает саму операционную систему. На Android он использует наименьшую ширину экрана устройства в независимых от плотности пикселях (600 dp и больше — планшет), то есть то же правило, по которому Android выбирает собственные раскладки. На iOS он использует идиому устройства системы, отличающую iPad от iPhone.
Ответ одинаков в портретной и альбомной ориентации, не зависит от того, как ваше приложение масштабирует содержимое, и доступен с самого первого кадра приложения.
Возможности
- Автономность: один ANE, без базовой библиотеки и зависимых ANE
- Телефон или планшет — отвечает операционная система
- Стабильно при смене ориентации и масштабировании приложения
- Наименьшая ширина экрана в dp (в пунктах на iOS) для ваших собственных порогов
- Доступно при запуске приложения, до первой раскладки
- Разрешения не нужны
Поддерживаемые платформы
На других платформах isSupported возвращает false, а deviceType — пустая строка.
Начало работы
Добавьте расширение в дескриптор вашего приложения:
<extensions>
<extensionID>com.klug.devicetype</extensionID>
</extensions>
Примеры кода
Три полных сценария. Геттеры возвращаются сразу и не требуют разрешений; каждое чтение снова запрашивает операционную систему. Полная документация →
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
| DeviceType.getInstance() | Возвращает единственный экземпляр. |
| isSupported | True на Android и iOS. |
| isTablet | True на планшете: Android — 600 dp и больше, iOS — iPad; false на других платформах. |
| isPhone | True на телефоне; false на других платформах. |
| deviceType | "tablet" или "phone"; пустая строка на других платформах. |
| smallestWidthDp | Меньшая сторона экрана: dp на Android, пункты на iOS; -1, где недоступно. |
Купить KlugDeviceType
Годовая лицензия на одно приложение AIR со всеми обновлениями в течение 12 месяцев. После оплаты вы получаете расширение, библиотеку ActionScript и документацию по e-mail, обычно в течение одного рабочего дня. Лицензия и условия
- Лицензия на одно приложение AIR
- Все обновления в течение 12 месяцев
- Без поддержки
- Лицензия на одно приложение AIR
- Все обновления в течение 12 месяцев
- Ответ по e-mail в течение 7 дней
- Лицензия на одно приложение AIR
- Все обновления в течение 12 месяцев
- Ответ по e-mail в течение 48 часов
Требования
| AIR SDK | 51.x (HARMAN) |
| iOS | iOS 17 или новее |
| Android | Android 6.0 (API 23) или новее |
| Разрешения | Нет |