← Kaikki laajennukset

Natiivilaajennus

KlugLayout

com.klug.layout

APM EI OLE TARPEEN. Lataa ja nauti. Yksinkertaisempaa ei voi olla.

Näyttöasettelu Android-tableteille ja taittuville laitteille sekä iPhone Duolle: vaaka-asento molemmille puolille, ja sovellus tietää, kun Fold, Flip tai iPhone Duo avataan tai suljetaan.

Android iOS Tuotantokäytössä Alkaen €19 / vuosi · Osta

Yleiskatsaus

Jotkin sovellukset on suunniteltu vain vaaka-asentoon, esimerkiksi tabletilla toimiva kamera-asema. Käyttäjät odottavat silti kuvan olevan oikein päin riippumatta siitä, miten laite asetetaan: painikkeet vasemmalla vai oikealla.

KlugLayout asettaa Androidin näytön suunnaksi vaaka-asennon molemmille puolille. Sovellus pysyy vaaka-asennossa, mutta kääntyy 180 astetta laitteen mukana. Se raportoi myös näytön nykyisen kierron, joten sovellus voi mukauttaa oman sisältönsä, kuten kamerakuvan, laitteen pitotavan mukaan.

Taittuvat laitteet vaihtavat näyttöä sovelluksen ollessa käynnissä. Galaxy Z Fold tai Pixel Fold on auki ollessaan tabletti ja kiinni ollessaan puhelin; Galaxy Z Flip siirtyy korkeasta päänäytöstään pieneen, lähes neliönmuotoiseen ulkonäyttöön. Kun laite siirtää sovelluksen toiselle näytölle, AIR-näyttämö ei aina saa koonmuutostapahtumaa, ja näytön koon ja kameran loven käynnistysarvot pysyvät ensimmäisen näytön arvoina. KlugLayout seuraa tätä natiivisti ja kertoo sovellukselle, minkälaisella näytöllä se on juuri nyt.

KlugLayout on päivittäisessä käytössä sovelluksissamme Android-tableteilla, todisteenamme toimivuudesta.

Taittuvat laitteet

KlugLayout luokittelee nykyisen ikkunan yhteen kolmesta luokasta ja lähettää tapahtuman aina, kun luokka vaihtuu:

tabletSuuri näyttö. Esimerkki: avattu Galaxy Z Fold tai Pixel Fold.
phonePuhelimen kokoinen näyttö. Esimerkki: suljettu Fold tai Flipin päänäyttö.
coverPieni ulkonäyttö. Esimerkki: Galaxy Z Flipin ulkonäyttö.

Kun Fold on suljettu, vaakalukitus keskeytetään, jotta puhelimen kokoinen ulkonäyttö voi käyttää pystyasentoa, ja se palaa, kun laite avataan uudelleen. Sovellus saa myös nykyisen näytön koon ja kameran loven, joten taittamisen jälkeen rakennettu asettelu sopii näytölle, jolla se näytetään.

Sovelluksissamme katselupuoli kirjautuu ulos ja takaisin sisään jokaisen taiton tai ulkonäytön vaihtumisen yhteydessä, jotta live-striimit käynnistyvät aina puhtaasti uudella näytöllä. Flipin ulkonäytöllä käyttöliittymä asetellaan tavallista puhelinta varten ja skaalataan pienemmäksi sopimaan näytölle.

Testattu Android-emulaattorissa laiteprofiileilla Pixel 9 Pro Fold ja Galaxy Z Flip.

iPhone Duo

iPhone Duo on Applen ensimmäinen taittuva laite: puhelin suljettuna, pieni tabletti avattuna. AIR ei seuraa sitä itsestään. Kun laite avataan, iOS voi pitää sovelluksen mustin reunuksin varustetussa puhelinikkunassa, koonmuutostapahtumaa ei tule, ja käynnistyksen näyttöarvot pysyvät ulkonäytön arvoina.

KlugLayout tunnistaa iOS:llä, millä näytöllä sovellus on, ja lähettää saman DEVICE_TYPE_CHANGED-tapahtuman kuin Androidilla: "phone", kun Duo on suljettu, "tablet", kun se on avattu. Sama koodi palvelee molempia alustoja.

Tila: perusasettelut on ratkaistu. Suljettu ja avattu asettelu, taittaminen ja avaaminen sovelluksen ollessa käynnissä, avatun laitteen kääntäminen ja keskitetyt natiivit dialogit toimivat. Striimaus ja kamera-asetukset on vielä testattava oikealla laitteella.

AIR 52:ta ei ole syytä odottaa: huhtikuusta 2027 alkaen App Store -lataukset on rakennettava iOS 27 SDK:lla, ja siitä lähtien AIR-sovellus kohtaa iPhone Duon taittuvana laitteena, joka se on. KlugLayout hoitaa sen jo tänään, AIR 51.4.1:llä.

Testattu Xcode 27 -simulaattorissa (iPhone Duo) HARMAN AIR 51.4.1:llä.

Ominaisuudet

  • Itsenäinen: yksi ANE, ei ydinkirjastoa tai riippuvaisia ANE-laajennuksia lisättäväksi
  • Vaaka-asento molemmille puolille, kääntyy laitteen mukana
  • Taiton tunnistus: tablet, phone tai Flipin ulkonäyttö, tapahtuma jokaisesta muutoksesta
  • iPhone Duo: puhelin suljettuna, tabletti avattuna, sama tapahtuma kuin Androidilla
  • Vaakalukitus vapautuu automaattisesti, kun Fold on suljettu
  • Nykyisen näytön koko ja kameran lovi, myös taittamisen jälkeen
  • Ei vaihtoa pystyasentoon
  • Näytön nykyinen kierto: 0, 90, 180 tai 270 astetta
  • Aktiivinen sovelluksen käynnistyksestä alkaen
  • Ei tee mitään muilla alustoilla, joten koodi voi pysyä monialustaisessa sovelluksessa

Tuetut alustat

Android arm64 · armv7
iOS arm64 · iPhone Duo

Aloitus

Lisää laajennus sovelluksesi descriptoriin:

app.xml
<extensions>
    <extensionID>com.klug.layout</extensionID>
</extensions>

Android 16:ta kohdistavien sovellusten tulisi sallia kiinteä suunta myös suurilla näytöillä tällä ominaisuudella, joka lisätään manifestin lisäysten <application>-elementtiin:

app.xml
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
          android:value="true"/>

Koodiesimerkit

Neljä täydellistä esimerkkiä sovellusrajapinnasta, joka pyörii sovelluksissamme. Kutsut palaavat heti; näytön muutokset saapuvat StatusEvent-tapahtumana. Koko dokumentaatio →

1 · Vaaka-asento molemmille puolille
Main.as
import com.klug.layout.KlugLayout;
import flash.display.StageAspectRatio;
import flash.events.StageOrientationEvent;

var layout:KlugLayout = KlugLayout.getInstance();

// isSupported is false on desktop platforms: every call below is then a no-op,
// so this code can stay in a cross-platform app
stage.autoOrients = true;
stage.setAspectRatio( StageAspectRatio.LANDSCAPE );   // first AIR's landscape ...
layout.setSensorLandscape();                          // ... then both sides on Android
                                                      // (on iOS LANDSCAPE already allows both sides)

// turn your own content, such as a camera picture, with the device
updatePicture();
stage.addEventListener( StageOrientationEvent.ORIENTATION_CHANGE, function( e:StageOrientationEvent ):void {
    updatePicture();
});

function updatePicture():void
{
    var rotation:int = layout.displayRotation;   // 0, 90, 180 or 270; -1 = unknown
    if ( rotation != -1 ) rotateCameraPicture( rotation );   // your app function
}
2 · Reagoi, kun taittuva laite avataan tai suljetaan
Fold.as
import flash.events.StatusEvent;

layout.addEventListener( StatusEvent.STATUS, onLayout );
layout.watchFold( stage );   // pass the stage: iOS needs it for the iPhone Duo

// events report changes only; read the class once for the start
var startClass:String = layout.deviceClass;   // "phone", "tablet", "cover" or "" (unknown)
showLayoutFor( startClass != "" ? startClass : chooseFromStage() );   // your own default

function onLayout( e:StatusEvent ):void
{
    if ( e.code != KlugLayout.DEVICE_TYPE_CHANGED ) return;
    showLayoutFor( e.level );   // "tablet" or "phone"; "cover" on a Galaxy Z Flip (Android)
}

// fold-only behaviour, kept away from normal phones and tablets
if ( layout.isFoldable ) enableFoldHints();   // your app function
3 · Aseta asettelu sen näytön mukaan, jolla sovellus nyt on
Layout.as
function showLayoutFor( deviceClass:String ):void
{
    // size of the current window in pixels, also after the device moved the app
    // to its other display; -1 = unknown, then fall back to the stage
    var w:int = layout.windowWidth  > 0 ? layout.windowWidth  : stage.stageWidth;
    var h:int = layout.windowHeight > 0 ? layout.windowHeight : stage.stageHeight;

    // top inset of the current display (Android: camera cutout, from Android 9)
    var top:int = Math.max( 0, layout.safeInsetTop );   // -1 = unknown

    if ( deviceClass == "tablet" )
        buildTabletViews( w, h, top );            // your app functions
    else
    {
        buildPhoneViews( w, h, top );
        if ( deviceClass == "cover" ) scaleToFit( w, h );   // phone layout, scaled down
    }
}
4 · Poistu vaakalukituksesta ja palaa siihen
Screens.as
// while a Fold is closed the lock is suspended on its own and comes back when it is opened.
// release() is for screens where the app itself leaves landscape (Android; no-op on iOS).
function openPortraitScreen():void
{
    layout.release();                                   // remove the landscape lock
    stage.setAspectRatio( StageAspectRatio.PORTRAIT );  // AIR decides again
}

function openStationScreen():void
{
    stage.setAspectRatio( StageAspectRatio.LANDSCAPE );
    layout.setSensorLandscape();                        // both landscape sides again
}

Rajapintayleiskatsaus

KlugLayout.getInstance()Palauttaa yksittäisen instanssin.
isSupportedTrue Androidilla ja iOS:llä. False muualla; jokainen kutsu on silloin tyhjä toiminto.
setSensorLandscape()Vaaka-asento molemmille puolille, kääntyy laitteen mukana. Kutsu sitä kutsun stage.setAspectRatio(StageAspectRatio.LANDSCAPE) jälkeen. Android; iOS:llä LANDSCAPE sallii jo molemmat puolet.
displayRotationNäytön nykyinen kierto asteina (0, 90, 180, 270) tai -1.
watchFold( stage )Aloittaa taitto- ja ulkonäyttömuutosten seurannan, myös ilman vaakalukitusta. iOS:llä stage tarvitaan iPhone Duota varten.
isFoldableTrue taittuvilla laitteilla: Androidin taittuvat laitteet (Android 11 tai uudempi) ja iPhone Duo.
release()Poistaa vaakalukituksen, esimerkiksi kun sovellus siirtyy puhelinasetteluun. Android; iOS:llä tyhjä toiminto.
deviceClassNykyinen luokka: "phone", "tablet" tai "cover"; "" kun tuntematon. iOS:llä saatavilla iPhone Duolla watchFold(stage)-kutsun jälkeen.
windowWidth / windowHeightNykyisen ikkunan koko pikseleinä, seuraa laitetta sen toiselle näytölle; -1 kun tuntematon.
safeInsetTopNykyisen näytön yläreunan sisennys pikseleinä: kameran lovi Androidilla (Android 9 tai uudempi), yläreunan turva-alue iOS:llä; -1 kun tuntematon.
DEVICE_TYPE_CHANGEDStatusEvent-koodi, joka lähetetään luokan jokaisen muutoksen yhteydessä.

Tapahtumat

deviceTypeChangedphone · tablet · cover (cover: Galaxy Z Flipin ulkonäyttö, Android). Lähetetään watchFold(stage)-kutsun jälkeen, Androidilla myös setSensorLandscape()-kutsun jälkeen; vain muutoksista.

Osta KlugLayout

Vuosilisenssi yhdelle AIR-sovellukselle, kaikki päivitykset 12 kuukauden ajan. Maksun jälkeen saat laajennuksen, ActionScript-kirjaston ja dokumentaation sähköpostitse, yleensä yhden arkipäivän kuluessa. Lisenssi ja ehdot

Perus
€19 / vuosi
  • Lisenssi yhdelle AIR-sovellukselle
  • Kaikki päivitykset 12 kuukauden ajan
  • Ei tukea
Osta Perus
Vakio
€149 / vuosi
  • Lisenssi yhdelle AIR-sovellukselle
  • Kaikki päivitykset 12 kuukauden ajan
  • Vastaus sähköpostitse 7 päivän kuluessa
Osta Vakio
Prioriteetti
€299 / vuosi
  • Lisenssi yhdelle AIR-sovellukselle
  • Kaikki päivitykset 12 kuukauden ajan
  • Vastaus sähköpostitse 48 tunnin kuluessa
Osta Prioriteetti
Link (Stripe) laskee verot kassalla. Syötät AIR-sovelluksesi sovellustunnuksen kassalla.

Vaatimukset

AIR SDK51.x (HARMAN)
AndroidAndroid 6.0 (API 23) tai uudempi; kameran lovi Android 9:stä (API 28) alkaen
iOSiOS 13 tai uudempi; iPhone Duo testattu AIR 51.4.1:llä
OikeudetEi mitään