Pencere yönetimi

ChromeOS, Android uygulamalarını birden fazla pencerede destekler. Sistem, uygulamaları pencere kapsayıcılarına bölerler. Bu kaplayacağı, boyutu reklamverenin form faktörüne gösteren bir e-posta adresi seçin.

Şekil 1. Farklı cihazlardaki uygulama penceresi.

Düzenlerin farklı ekran boyutlarıyla uyumlu olması önemlidir. Şu durumda: farklı ekranları desteklemek için Android yönergelerini uygulayın. boyutları ile ayarlarsanız uygulamanız da ChromeOS'te çalışırken.

Bu sayfada, uygulama penceresinin doğru bir şekilde başlatılmasını ve yeniden boyutlandırılmasını nasıl sağlayacağınız gösterilmektedir yumuşak bir şekilde ve boyutu değiştiğinde tüm içeriğini görüntüler.

İlk lansman boyutu

Uygulamalar ilk lansman boyutunu aşağıdaki şekillerde isteyebilir:

  • Yalnızca masaüstü ortamlarında bir başlatma boyutu kullanın. Bu, pencere yöneticisinin size uygun sınırları koymasına ve Yönü. Masaüstü modunda kullanıldığında bir tercih belirtmek için aşağıdaki meta etiketleri <activity>:
<meta-data android:name="WindowManagerPreference:FreeformWindowSize"
           android:value="[phone|tablet|maximize]" />
<meta-data android:name="WindowManagerPreference:FreeformWindowOrientation"
           android:value="[portrait|landscape]" />
  • Statik başlatma sınırlarını kullanın. <layout> "düzeltilmiş" bir durum belirtmek için başlangıç boyutu:
<layout android:defaultHeight="500dp"
            android:defaultWidth="600dp"
            android:gravity="top|end"
            android:minHeight="450dp"
            android:minWidth="300dp" />
  • Dinamik başlatma sınırlarını kullan. Bir etkinlik, Yeni bir etkinlik oluştururken ActivityOptions.setLaunchBounds(Rect). Ölçüt boş bir dikdörtgen belirttiğinizde uygulamanız en üst düzeye çıkarılabilir.
ziyaret edin.

Pencereleri yeniden boyutlandırma

ChromeOS'te kullanıcılar bir uygulamanın penceresini normal şekilde, yani sürükleyerek yeniden boyutlandırabilirler. sağ alt köşesine dokunun.

Şekil 2. Yeniden boyutlandırılabilir bir uygulama penceresi

Pencere boyutunu değiştirmek için View sınıf:

  • Aşağıdakileri çağırarak yapılandırma değişikliklerine dinamik olarak yanıt verme onConfigurationChanged(..) Örneğin, android:configChanges="screenSize|smallestScreenSize|orientation|screenLayout". kullanabilirsiniz. Yapılandırma değişikliklerini işlemeyle ilgili daha fazla bilgi için Yapılandırma değişikliklerini işleme.
  • Sistemin etkinliği yeniden başlatmasına izin verin. Bu durumda, onSaveInstanceState ve ViewModel mimarisini kullanın bileşenini önceki durumu.

Jetpack Compose'u kullanırken yeniden boyutlandırma davranışı nasıl yapılandırıldığını görebilirsiniz. Değişiklikleri dinamik bir şekilde ele alırsa, yeniden oluşturma, pencere boyutu değiştiğinde tetiklenir. Etkinlik yeniden başlatılırsa, yeniden başlatmadan sonra bir ilk beste oluşur. İkisinden biri Bu nedenle, değişen pencerelere uyarlanan "Oluşturma" düzenleri oluşturmanız önemlidir. seçin. Sabit boyutları varsaymayın.

Pencere boyutları

Etkinliklerinizin her başlatıldığında pencere boyutlarını okumasını ve mevcut yapılandırmaya göre düzenleyebilir.

Mevcut yapılandırmayı belirlemek için getResources().getConfiguration() işlevini çağırın güncel bilgiler sağlar. Lütfen arka plan etkinliğinin veya sistem kaynağının yapılandırması. Arka plan etkinliğinin boyutu yok. Sistem yapılandırması boyutları ve yönleri birbiriyle çelişen birden çok pencere içerdiği için kullanılamaz veriler ayıklanabilir.

Pencere boyutu ile ekran boyutunun aynı olmadığını unutmayın. To almak için DP'de pencere boyutu, Activity.getResources().getConfiguration().screenWidth değerini kullanın ve Activity.getResources().getConfiguration().screenHeight. Muhtemelen bu hiçbir zaman ekran boyutunu kullanılması gerekmez.

İçerik sınırları

Bir pencerenin içerik sınırları, yeniden boyutlandırma işleminden sonra değişebilir. Örneğin, uygulama tarafından kullanılan pencere, pencere açılamayacak kadar büyük olursa ekrana sığdırır. Aşağıdaki yönergeleri izleyin:

  • Android'in düzen işlemini kullanan uygulamalar otomatik olarak yerleştirilir. kullanabilirsiniz.
  • Yerel uygulamaların, mevcut alanı okuması ve boyut değişikliklerini izlemesi, böylece kullanıcı arayüzü öğeleri içeriyor. Hedef kitlenizin tahminini belirlemek için bu yüzey için kullanılabilir ilk boyut:

    • NativeActivity.mLastContent[X/Y/Width/Height]()
    • findViewById(android.R.id.content).get[Width/Height]()

    Sürekli izleme bir gözlemci kullanılarak yapılabilir:

    • NativeActivity.onContentRectChangedNative()
    • NativeActivity.onGlobalLayout()
    • view.addOnLayoutChangeListener(findViewById(android.R.id.content)) için dinleyici ekleyin

    Uygulama, posterin ön ölçeklendirmesini yapıyorsa çözünürlük her değiştiğinde bunu yapın.

Serbest biçimli yeniden boyutlandırma

ChromeOS, tüm pencerelerin serbestçe yeniden boyutlandırılmasına olanak tanır. Kullanıcı bir pencerenin ekranda genişliği, yüksekliği ve konumu. Birçok Android uygulaması uygun olduğuna karar verdik. Şu hususları göz önünde bulundurun:

  • Ekran konumu değişebilir. Her zaman ekrandan pencereye ve ekrandan pencereye koordinat dönüşümleri gerçekleştirmek üzere çalışan bir sistemdir.
  • Android'in görünüm sistemini kullanıyorsanız pencere düzeniniz boyutu değiştiğinde otomatik olarak değişir.
  • Görüntüleme sistemini kullanmıyor ve yüzeyi ele alamıyorsanız uygulamanız kendi kendine yönetmesi için bir fırsattır.
  • Yerel uygulamalarda mLastContent üyelerini kullanın veya içerik görünümünü kullanarak boyutu belirler.
  • Uygulama çalışırken onContentRectChangedNative veya Boyut değişikliklerine tepki vermek için onGlobalLayout etkinlik.
  • Uygulamanın boyutu değiştiğinde düzenler ve posterleri yeniden ölçeklendirin veya yeniden yükleyin giriş alanlarını güncelleyin.

Tam ekran modu

Tam ekran modu, stok Android'de olduğu gibi çalışır. Pencere tüm ekranı kapatmıyorsa tam tarama isteğinde bulunur. (tüm sistem kullanıcı arayüzü öğeleri gizlenir) yoksayılır. Uygulama büyütüldüğünde normal tam ekran yöntemleri, düzenler ve işlevleri gerçekleştirilir. Bu işlem, sistem kullanıcı arayüzü öğelerini (pencere kontrol çubuğu ve raf) gizler.

Ekran yönü

Android uygulamalarında en yaygın kullanılan yön dikeydir çünkü bu şekilde çoğu telefon tutulur. Dikey görünüm telefonlar için iyi olsa da (yatayın tercih edildiği, dizüstü bilgisayar ve tabletlerinde) Şunları almak için: en iyi sonuçları elde etmek istiyorsanız her iki yönü de desteklemeyi düşünün.

Bazı Android uygulamaları, cihaz dikey modda tutulduğunda rotasyon değeri: Surface.ROTATION_0 Bu durum çoğu Android cihaz için geçerli olabilir. Ancak, uygulama belirli ARC modundaysa dikey yön için döndürme değeri Surface.ROTATION_0.

İvme ölçeri veya benzeri değerleri okurken doğru dönüş değeri elde etmek için için Display.getRotation() bağlantısını kullanın yöntemini kullanın ve ekseni buna göre değiştirin.

Kök etkinliği ve yönü

Bir Chromebook penceresi, yığın etkinlik pencerelerinden oluşur. Her pencere boyutu ve yönü aynı.

Masaüstünde ani yön ve boyut değişikliklerinin kafa karıştırıcı olması bahsedeceğim. Chromebook pencere yöneticisi bunu benzer bir şekilde önler Android'in yan yana moduna: Yığın denetimlerinin alt kısmındaki etkinlik özelliklerine sahip olduğundan emin olun. Bu da beklenmedik durumlara yol açabilir Burada dikey ve yeniden boyutlandırılamayan yeni başlayan bir aktivite yatay hâline geliyor. yeniden boyutlandırabilirsiniz.

Cihaz modunun bu konuda bir etkisi vardır: Tablet modunda yön kilitli değilken ve her pencere Android'de normalde olduğu gibi kendi yönünü korur.

Yön kuralları

Kullanım yönü için aşağıdaki yönergeleri uygulayın:

  • Yalnızca bir yönü destekliyorsanız bilgileri manifest dosyasına ekleyerek uygulamaya başlamadan önce pencere yöneticisinden haberdar olması gerekir. Google Takvim widget'ını yönü belirtin ve mümkün olduğunda sensör yönlerini de belirtin. Chromebook'lar genellikle dönüştürülebilirdir ve ters çevrilmiş bir uygulama kötü bir kullanıcı deneyimidir.
  • Seçilen tek bir yönde kalmaya çalışın. Tek bir yön istemekten kaçının oluşturup daha sonra programatik olarak başka bir tane ayarlayın.
  • Yönü pencere boyutuna göre değiştirirken dikkatli olun. Kullanıcı, küçük bir dikey boyutlu pencerede takılıp kalıyor ve daha büyük bir pencereye yatay pencere.
  • Chrome'da, mevcut olan tüm uygulamalar arasında geçiş yapabileceğiniz pencere kontrolleri vardır düzenler. Doğru yön seçeneğini belirleyerek kullanıcının sonra doğru düzene sahip. Uygulama dikey modda mevcutsa mümkünse varsayılan olarak yatay yapın. Bu seçenek belirlendikten sonra her uygulama için hatırlanır.
  • Gereksiz yön değişikliklerinden kaçınmaya çalışın. Örneğin, yön dikey ancak uygulama setRequestedOrientation(LANDSCAPE) çağırıyor bu, çalışma zamanında pencerenin gereksiz yeniden boyutlandırılmasına neden olur. Bu da çalışan tarafından işlenemez ve uygulamanın işleyemediği uygulamayı yeniden başlatabilir. Hedef kitlenizi belirlemek Yönü bir kez (örneğin, manifest'te) çıkarıp yalnızca bakın.

Dikkat edilmesi gereken diğer noktalar

Android uygulamalarıyla çalışırken göz önünde bulundurmanız gereken diğer bazı noktalar aşağıda belirtilmiştir: ChromeOS:

  • Etkinliğinizin onDestroy yönteminde finish() yöntemini çağırmayın. Bu durum, uygulamanın yeniden boyutlandırıldıktan sonra kapanmasını sağlamaz.
  • TYPE_KEYGUARD ve gibi uyumlu olmayan pencere türlerini kullanmayın. TYPE_APPLICATION_MEDIA.
  • Önceden oluşturulmuş nesneleri önbelleğe alarak etkinliğin hızlı bir şekilde yeniden başlatılmasını sağlayın tahsis edilmiş olabilir.
  • Kullanıcının uygulamanızı yeniden boyutlandırmasını istemiyorsanız android:resizeableActivity=false.
  • Uygulamanızı test ederek doğru şekilde ayarlamanız gerekir.