Bağlı ekranlar, pencereli görüntüleme deneyimini standart telefonlara taşıyarak kullanıcıların mobil cihazlarından büyük ekranlara erişmesine olanak tanır. Bu özellik, uygulama etkileşimi ve kullanıcı üretkenliği için yeni olanaklar sunar.
Pencereli görüntülemenin tüm benzersiz özellikleri bağlı ekranlar için geçerlidir. Bir telefonu ekrana bağladığınızda telefonun durumu değişmez ve bağlı ekranda boş bir masaüstü oturumu başlar. Cihaz ve ekran, her ekrana özel uygulamalarla iki ayrı sistem olarak çalışır.
Tablet gibi pencereli görüntüleme özellikli bir cihazı harici bir monitöre bağlarsanız masaüstü oturumu her iki ekrana da yayılır. Ardından iki ekran, tek bir sürekli sistem olarak çalışır. Bu kurulum, pencerelerin, içeriğin ve imlecin iki ekran arasında serbestçe hareket etmesine olanak tanır.
Bağlı ekranları etkili bir şekilde desteklemek için uygulamanızın tasarımının ve uygulamasının çeşitli yönlerine dikkat etmeniz gerekir. Aşağıdaki en iyi uygulamalar, sorunsuz ve üretken bir kullanıcı deneyimi sağlar.
Dinamik ekran değişikliklerini işleme
Birçok uygulama, Display nesnesinin ve özelliklerinin uygulamanın yaşam döngüsü boyunca değişmeyeceği varsayımıyla oluşturulur. Ancak kullanıcı harici bir monitör bağladığında veya bağlantısını kestiğinde, hatta bir uygulama penceresini ekranlar arasında taşıdığında uygulamanızın bağlamı veya penceresiyle ilişkili temel Display nesnesi değişebilir. Ekranın boyut, çözünürlük, yenileme hızı, HDR desteği ve yoğunluk gibi özellikleri farklı olabilir. Örneğin, telefonun ekranına göre değerleri kod gömerseniz düzenleriniz büyük olasılıkla harici bir ekranda bozulur.
Harici ekranların piksel yoğunlukları da çok farklı olabilir. Uygulamanızın yoğunluk değişikliklerine doğru şekilde yanıt verdiğinden emin olmanız gerekir. Bunun için düzenlerde yoğunluktan bağımsız pikseller (dp) kullanmanız, yoğunluğa özel kaynaklar sağlamanız ve kullanıcı arayüzünüzün uygun şekilde ölçeklendirilmesini sağlamanız gerekir.
Harici bir ekranda çalışan bir etkinlik varsa ekranın bağlantısı kesildiğinde sistem, etkinliği birincil ekrana taşır. Bu taşıma işlemi, ekran boyutu ve yoğunluk değişiklikleri gibi yapılandırma değişikliklerini tetikler. Bu değişiklikler, etkinliğin yeniden oluşturulmasına neden olabilir. Uygulamanız, veri kaybını veya kafa karıştırıcı bir kullanıcı deneyimini önlemek için kullanıcı arayüzü durumunu kaydedip geri yükleyerek yapılandırma değişikliğini işlemelidir.
Doğru bağlamı kullanma
Birden çok ekranın kullanıldığı ortamlarda doğru bağlamı kullanmak çok önemlidir. Kaynaklara erişirken etkinlik bağlamı (gösterilir) ile uygulama bağlamı (gösterilmez) farklıdır.
Etkinlik bağlamı, ekranla ilgili bilgiler içerir ve her zaman etkinliğin göründüğü ekran alanına göre ayarlanır. Bu sayede, uygulamanızın ekran yoğunluğu veya pencere metrikleri hakkında doğru bilgileri alabilirsiniz. Mevcut pencere veya ekran hakkında bilgi edinmek için her zaman etkinlik bağlamını (veya kullanıcı arayüzü tabanlı başka bir bağlamı) kullanın. Bu durum, bağlamdaki bilgileri kullanan bazı sistem API'lerini de etkiler.
Jetpack Compose'da, LocalConfiguration.current ve LocalDensity.current gibi CompositionLocal nesnelerini kullanarak ekrana özgü bilgilere erişebilirsiniz. Bir etkinlik veya pencere ekranlar arasında taşındığında cihaz yapılandırması değişir ve yeni ekran metrikleriyle yeniden oluşturma tetiklenir. CompositionLocal nesneleri, kullanıcı arayüzünüzün sorunsuz bir şekilde uyum sağlamasına olanak tanır.
Ekran bilgilerini alma
Ekran boyutu, yoğunluk veya işaretler gibi bilgileri almak için Display sınıfını kullanabilirsiniz. Kullanılabilir ekranları almak için DisplayManager sistem hizmetini kullanın. Harici ekranları belirlemek için genellikle yerleşik telefon veya tablet ekranı olan Display.DEFAULT_DISPLAY değerini filtreleyin:
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val displays = displayManager.getDisplays() // The default display is 0. External displays have other IDs. val externalDisplays = displays.filter { it.displayId != Display.DEFAULT_DISPLAY }
Etkinlik başlatma ve yapılandırmayı yönetme
Bağlı ekranlar sayesinde uygulamalar, başlatıldığında veya başka bir etkinlik oluşturduğunda hangi ekranda çalışması gerektiğini belirtebilir. Bu davranış, manifest dosyasında tanımlanan etkinlik başlatma moduna ve etkinliği başlatan varlık tarafından ayarlanan intent işaretlerine ve seçeneklerine bağlıdır.
Bir etkinlik ikincil ekrana taşındığında uygulamanızda bağlam güncellemesi, pencere yeniden boyutlandırma, yapılandırma ve kaynak değişiklikleri yaşanabilir. Etkinlik, yapılandırma değişikliğini işlerse onConfigurationChanged() içinde bilgilendirilir. Aksi takdirde etkinlik yeniden başlatılır.
Bir etkinliğin seçilen başlangıç modu birden fazla örneğe izin veriyorsa ikincil ekranda başlatma, etkinliğin yeni bir örneğini oluşturabilir. Her iki etkinlik de aynı anda devam ettirilir. Bu, belirli çoklu görev senaryolarında faydalı olabilir.
ActivityOptions kullanarak belirli bir ekranda etkinlik başlatabilirsiniz.
launchDisplayId için Android 8 (API düzeyi 26) veya sonraki sürümlerin gerektiğini unutmayın.
// Get DisplayManager and find the first external display. val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val externalDisplayId = displayManager.displays .firstOrNull { it.displayId != Display.DEFAULT_DISPLAY } ?.displayId // If an external display is found, launch the activity on it. if (externalDisplayId != null) { val intent = Intent(this, MySecondaryActivity::class.java) val options = ActivityOptions.makeBasic() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { options.launchDisplayId = externalDisplayId } startActivity(intent, options.toBundle()) } else { // Optionally, handle the case where no external display is connected. }
Cihaz izin verilenler listelerinden kaçınma
Uygulamalar bazen büyük ekran kullanıcı arayüzünü ve özelliklerini, izin verilenler listesi aracılığıyla veya BUILD.MODEL ve yerleşik ekran boyutunu kontrol ederek belirli cihazlarla kısıtlar.
Bu yaklaşım, bağlı ekranlar için etkili değildir. Çünkü neredeyse her cihaz büyük bir ekrana bağlanabilir ve harici bir ekran bağlandığında cihaz modeli değişmez.
Kullanıcı arayüzüyle ilgili kararlar almak için izin verilenler listelerini kullanmak veya BUILD.MODEL ve yerleşik ekran boyutunu kontrol etmek yerine çalışma zamanında pencere metriklerini ya da cihaz özelliklerini kontrol edin. Çeşitli ekran boyutları ve yoğunlukları için duyarlı ve uyarlanabilir düzenler oluşturmak üzere Jetpack WindowManager API'lerini veya pencere boyutu sınıflarını kullanın.
Harici çevre birimlerini destekleme
Kullanıcılar harici bir ekrana bağlandıklarında genellikle masaüstüne benzer bir ortam oluştururlar. Bu genellikle harici klavye, fare, dokunmatik yüzey, web kamerası, mikrofon ve hoparlör kullanımını içerir. Uygulamanızın bu çevre birimleriyle sorunsuz bir şekilde çalıştığından emin olmanız gerekir. Buna klavye kısayollarını işleme, fare işaretçisi etkileşimlerini yönetme, harici kameraları veya mikrofonları doğru şekilde destekleme ve ses çıkışı yönlendirmesine uyma dahildir. Daha fazla bilgi için Büyük ekranlarda giriş uyumluluğu başlıklı makaleyi inceleyin.
Kullanıcı üretkenliğini artırma
Bağlı ekranlar, kullanıcı üretkenliğini artırmak için önemli bir fırsat sunar. Artık masaüstü uygulamalarıyla karşılaştırılabilir deneyimler sunabilen mobil uygulamalar oluşturmak için gereken araçlara sahipsiniz. Kullanıcı üretkenliğini artırmak için aşağıdaki özellikleri uygulayabilirsiniz:
- Kullanıcıların aynı uygulamanın birden fazla örneğini açmasına izin verin. Bu, dokümanları karşılaştırma, farklı görüşmeleri yönetme veya birden fazla dosyayı aynı anda görüntüleme gibi görevler için çok önemlidir.
- Kullanıcıların sürükle ve bırak özelliğiyle uygulamanızın içinde ve dışında zengin veriler paylaşmasına olanak tanıyın.
- Güçlü bir durum yönetimi sistemi uygulayarak kullanıcıların yapılandırma değişiklikleri sırasında iş akışlarını sürdürmelerine yardımcı olun.
Bu yönergeleri uygulayarak ve sağlanan kod örneklerini kullanarak bağlı ekranlara sorunsuz bir şekilde uyum sağlayan uygulamalar oluşturabilir, kullanıcılara daha zengin ve daha üretken bir deneyim sunabilirsiniz.