TV cihazları, uygulamalar için sınırlı bir gezinme denetimi grubu sağlar. TV uygulamanız için etkili bir gezinme şeması oluşturmak, bu sınırlı kontrolleri ve uygulamanızı çalıştırırken kullanıcı sınırlamalarını anlamaya bağlıdır. TV için Android uygulamanızı geliştirirken, kullanıcının dokunmatik ekran yerine uzaktan kumanda düğmelerini kullanırken nasıl gezindiğine özellikle dikkat edin.
İlkeler
Amaç, kullanıcı arayüzünü doyurmadan veya dikkati içerikten başka yöne kaydırmadan gezinmenin doğal ve tanıdık gelmesidir. Aşağıdaki ilkeler, TV uygulamalarında tutarlı ve sezgisel bir kullanıcı deneyimi için bir temel oluşturmaya yardımcı olur.
İçeriğe erişimi hızlı ve kolay hale getirin. Kullanıcılar minimum sayıda tıklama kullanarak içeriklere hızlı bir şekilde erişmek ister. Bilgilerinizi en az sayıda ekran gerektiren şekilde düzenleyin.
Gezinmeyi kullanıcılar için tahmin edilebilir hale getirmek için en iyi uygulamaları ve önerileri uygulayın. Kafa karışıklığına ve öngörülemezliğe yol açacağından, gezinme kalıplarını gereksiz şekilde yeniden oluşturmayın.
Gezinmeyi, yaygın olarak benimsenen kullanıcı davranışlarını sorunsuz bir şekilde destekleyecek kadar basit hale getirin. Gereksiz gezinme katmanları ekleyerek aşırı karmaşık hale getirmeyin.
Kumandalar
Minimalist uzaktan kumandadan karmaşık oyun kumandalarına kadar pek çok farklı kumanda seçeneği mevcuttur. Tüm kumandalarda bir yön tuşları (D-pad) ile birlikte seçme, ana sayfa ve geri düğmeleri bulunur. Diğer düğmeler modele göre değişir.
![Örnek Uzaktan Kumanda](https://developer.android.com/static/training/tv/images/tv-nav-controller.png?authuser=6&hl=tr)
D-pad
TV'de birincil gezinme yöntemi, yukarı, aşağı, sol ve sağa yön donanım düğmelerini içeren D-pad aracılığıyla yapılır. D-pad, odağı bir nesneden düğmeye basıldığı yönde en yakın nesneye aktarır.
Seç düğmesi
Odağı olan ekrandaki öğeyi seçer.
Ana sayfa düğmesi
Kullanıcıyı sistem ana ekranına yönlendirir.
Geri düğmesi
Kullanıcılara önceki görünüme geri dönme olanağı verir.
Mikrofon düğmesi
Google Asistan'ı veya ses girişini çağırır.
D-pad ile gezinme
Kullanıcılar, TV cihazlarında D-pad veya ok tuşlarını kullanarak gezinebilir. Bu kontrol türü, hareketleri yukarı, aşağı, sola ve sağa doğru sınırlandırır. TV için optimize edilmiş mükemmel bir uygulama oluşturmak için kullanıcının bu sınırlı kontrolleri kullanarak uygulamanızda nasıl gezineceğini hızlı bir şekilde öğrenebileceği bir gezinme şeması sağlamanız gerekir.
Android çerçevesi, düzen öğeleri arasında yönlü gezinmeyi otomatik olarak işlediğinden uygulamanız için genellikle fazladan bir şey yapmanız gerekmez. Bununla birlikte, gezinme sorunlarını keşfetmek için bir D-pad kumandasıyla gezinmeyi kapsamlı bir şekilde test etmeniz gerekir.
Uygulamanızın gezinme sisteminin TV cihazındaki D-pad ile iyi çalışıp çalışmadığını test etmek için aşağıdaki yönergeleri uygulayın:
- D-pad kumandası olan bir kullanıcının, ekrandaki tüm kontrollere gidebildiğinden emin olun.
- Odaklanılmış listeleri kaydırmak için, D-pad'in yukarı ve aşağı düğmelerinin listeyi kaydırdığından ve seç düğmesinin listedeki bir öğeyi seçtiğinden emin olun. Kullanıcıların listeden bir öğe seçebildiğini ve bir öğe seçildiğinde listenin hâlâ kaydığını doğrulayın.
- Kontroller arasında geçişin basit ve öngörülebilir olduğundan emin olun.
Yönlü gezinmeyi değiştirme
Android çerçevesi, düzeninizdeki odaklanılabilir öğelerin göreli konumuna göre otomatik olarak bir yönlü gezinme şeması uygular. D-pad kumandası kullanarak uygulamanızda oluşturulan gezinme şemasını test edin. Testten sonra, kullanıcıların düzenleriniz arasında belirli bir şekilde hareket etmesini istediğinize karar verirseniz kontrolleriniz için belirgin bir yön gezinmesi ayarlayabilirsiniz.
Aşağıdaki kod örneğinde, bir TextView
düzen nesnesine odaklanılacak bir sonraki kontrolün nasıl tanımlanacağı gösterilmektedir:
<TextView android:id="@+id/Category1" android:nextFocusDown="@+id/Category2" />
Aşağıdaki tabloda, Android kullanıcı arayüzü widget'larında kullanılabilen tüm gezinme özellikleri listelenmektedir:
Özellik | İşlev |
---|---|
nextFocusDown |
Kullanıcı aşağı kaydırdığında odaklanılacak bir sonraki görünümü tanımlar. |
nextFocusLeft |
Kullanıcı sola gittiğinde odağın alınacağı bir sonraki görünümü tanımlar. |
nextFocusRight |
Kullanıcı sağa kaydırdığında odaklanılacak bir sonraki görünümü tanımlar. |
nextFocusUp |
Kullanıcı yukarı kaydırdığında odağı alacak bir sonraki görünümü tanımlar. |
Bu açık gezinme özelliklerinden birini kullanmak için değeri, düzendeki başka bir widget'ın android:id
değerine ayarlayın. Gezinme sırasını bir döngü olarak ayarladığınızdan emin olun. Böylece, son kontrol, odağı tekrar ilk sıraya yönlendirir.
Net bir odak ve seçim imkanı sunun
Bir uygulamanın TV cihazlarındaki gezinme şemasının başarısı, kullanıcının odakta olan kullanıcı arayüzü öğesini belirlemenin ne kadar kolay olduğuna bağlıdır. Odaklanılan öğeyi ve dolayısıyla bir kullanıcının hangi öğe üzerinde işlem yapabileceğini net bir şekilde belirtmezseniz kullanıcı hızla bıkkınlık hissedebilir ve uygulamanızdan çıkabilir. Aynı nedenle, kullanıcının uygulamanız başlar başlamaz veya boşta kaldığında hemen işlem yapabileceği bir öğeye her zaman odaklanmanız da önemlidir.
Uygulama düzeninizde ve uygulamanızda renk, boyut, animasyon veya bu özelliklerin bir kombinasyonunu kullanın. Böylece, kullanıcıların daha sonra hangi işlemleri gerçekleştirebileceklerini kolayca belirleyebilirsiniz. Uygulamanız genelinde odağı göstermek için tek tip bir şema kullanın.
Android, odaklanılan ve seçilen denetimler için vurgulamaları uygulamak üzere Çizilebilir durum listesi kaynakları sağlar. Aşağıdaki kod örneğinde, kullanıcının denetime gittiğini ve ardından onu seçtiğini belirtmek için bir düğmenin görsel davranışının nasıl etkinleştirileceği gösterilmektedir:
<!-- res/drawable/button.xml -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/button_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/button_focused" /> <!-- focused -->
<item android:state_hovered="true"
android:drawable="@drawable/button_focused" /> <!-- hovered -->
<item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
Aşağıdaki düzen XML örnek kodu, önceki durum listesini bir Button
öğesine uygular:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/button" />
Odaklanabilir ve seçilebilir kontrollerde, çevresindeki vurguların net bir şekilde görünür olması için yeterli dolgu sağladığınızdan emin olun.
Geri düğmesiyle gezinme
Platformdaki uygulamalar arasında tutarlılık sağlamak için geri düğmesinin davranışının bu yönergelere uyduğundan emin olun.
Tahmin edilebilir geri düğmesi davranışı kullanın
Kolay ve tahmin edilebilir bir gezinme deneyimi sunmak için kullanıcı uzaktan kumandanın geri düğmesine bastığında önceki hedefe yönlendirilir.
![Üst gezinme menüsünü kullanırken gezinme akışını açıklayan resim](https://developer.android.com/static/training/tv/images/tv-nav-top.png?authuser=6&hl=tr)
![Yanda gezinme kullanılırken gezinme akışını açıklayan resim](https://developer.android.com/static/training/tv/images/tv-nav-left.png?authuser=6&hl=tr)
Kullanıcı bir menü öğesinden sayfanın ortasındaki bir karta gidip geri düğmesine basarsa sonuç, uygulamanın üst gezinmeyi mi yoksa sol gezinmeyi mi kullandığına bağlıdır:
- Uygulamada üst gezinmeyi kullanma: Hızlı bir şekilde kaydırarak ve menüde odağı etkinleştirerek kullanıcıyı sayfanın üst kısmına geri götürün.
- Uygulama, sol gezinme menüsünü kullanır: Sol taraftaki menüyü etkinleştirin ve şu anda etkin olan menü öğesine odaklanın.
Geri düğmesinin, onay ekranlarıyla veya bir sonsuz döngünün parçası tarafından kapatılmadığından emin olun.
![Kullanıcılara çıkmak isteyip istemediklerini soran iletişim kutusunu gösteren ekran görüntüsü](https://developer.android.com/static/training/tv/images/tv-nav-back-button-dialog.png?authuser=6&hl=tr)
Şunu yapmayın:
Çıkış kapılarından kaçının. Kullanıcıların onay almadan uygulamadan çıkmasına
izin verin.
![Gezinme döngüsünü gösteren ekran görüntüsü](https://developer.android.com/static/training/tv/images/tv-nav-loop.gif?authuser=6&hl=tr)
Şunu yapmayın:
Menüyü kapatıp açmanın sonsuz döngüsüne asla girmeyin. İdeal olarak, geri düğmesine basıldığında uygulamadan çıkılır. Çocuk profili gibi özel bir durum olmadığı sürece menüde çıkış düğmesi göstermeyin.
Yukarı veya geri düğmesi göstermeyin
Avuç içi cihazların aksine, TV'de geri gitmek için uzaktan kumandadaki geri düğmesi kullanılır. Ekranda sanal geri düğmesi gösterilmesine gerek yoktur:
![Ekranda bir esnek geri düğmesini gösteren ekran görüntüsü](https://developer.android.com/static/training/tv/images/tv-nav-no-soft-back.png?authuser=6&hl=tr)
Şunu yapmayın:
Gerekirse bir iptal düğmesi gösterin
Görünür tek işlemler onaylama, yıkıcı veya satın alma işlemleri ise önceki hedefe geri dönen bir İptal düğmesi olması önerilir:
![Ekranda geçici iptal düğmesini gösteren ekran görüntüsü](https://developer.android.com/static/training/tv/images/tv-nav-cancel.png?authuser=6&hl=tr)
Şunu yapın:
Geri gezinme uygulayın
Android çerçevesi genellikle D-pad'de olduğu gibi geriye gitmeyi de başarılı bir şekilde yönetir. Gezinme bileşenini kullanırsanız çeşitli gezinme grafiklerini destekleyebilirsiniz. Bazen, geri düğmesi odağı uzun bir listenin başına sıfırlamak gibi bazı özel davranışlar uygulamanız gerekebilir.
FragmentActivity
ve AppCompatActivity
için temel sınıf olan ComponentActivity
, getOnBackPressedDispatcher()
komutunu çağırarak alabileceğiniz OnBackPressedDispatcher
geri düğmesinin davranışını kontrol etmenizi sağlar.
Daha fazla bilgi edinmek için Özel geri gezinme sağlama konusuna bakın.
TV'deki oynatma kontrolleri
Video oynatma, TV'deki en önemli özelliklerden biridir. Android TV'deki uygulamalardaki video oynatıcıların aynı şekilde davranması önemlidir. TV için oynatma kontrolleri yönergelerine bakın.
Canlı sekmesinde gezinme
Canlı sekmesine entegre canlı TV feed'i olan uygulamalar, TV uygulaması kalite şartlarına uymanın yanı sıra aşağıdaki bölümlerde açıklanan sorunsuz oynatma ve doğrudan geri oynatma şartlarını da karşılamalıdır.
Sorunsuz oynatma
Sorunsuz oynatma, Google TV ve Android TV'deki herhangi bir Canlı/Doğrusal kanal derin bağlantısından sonraki uygulama içi davranışlar için geçerlidir.
Google TV ve Android TV'den Canlı/Doğrusal kanal derin bağlantısını tıklayan kullanıcılar, hedef uygulamanın ekranları engellenmeden veya geciktirmeden doğrudan kanalda oynatmaya yönlendirilmelidir. Oturum açma akışlarına, kayıt akışlarına, marka bilinci oluşturma videolarına ve diğer gecikmelere izin verilmez.
Bununla birlikte, derin bağlantı, hedef uygulama yüklemeyi soğuk başlatmadan başlatırsa oynatmadan önceki bu başlatma gecikmesine izin verilir. Bu durumda, uygulama başlatma marka bilinci oluşturma videosuna veya animasyonuna da izin verilir. Böyle bir soğuk başlatma deneyiminin oturum başına bir defadan fazla gerçekleşme olasılığı düşüktür.
Ayrıca, derin bağlantılı kanala geçmek birkaç saniye sürüyorsa kanalın ve/veya hizmet markasının gösterilmesine izin verilir. Ancak bu sürenin, yalnızca kanalın yüklenmesi için gereken süre kadar (ve uygulama içindeki ortalama kanal yüklenme sürelerine benzer) olması gerekir.
Kullanıcı oturumu kapalıysa veya abone değilse oturum açma veya kaydolma akışını tamamlamak için ücretli bir kanalda oynatmayı engelleyebilirsiniz.
Doğrudan Dönüş
Kullanıcılar Canlı sekmesindeki derin bağlantıdan bir uygulamayı başlattıktan sonra geri düğmesine bastığında, ne kadar süre geçmiş olursa olsun tek bir kez tekrar basıldığında Canlı sekmesine döndürülmelidir. Bu doğrudan geri çalışma davranışı, Google TV ve Android TV'deki tüm Canlı sekmesi derin bağlantıları için gereklidir.
Canlı sekme derin bağlantıları, eklenen derin bağlantı parametresiyle ayırt edilir:
?exit_on_back=[true|false]
. Uygulamalar, Canlı sekmesinden başlatılıp başlatılmadığını belirlemek için bu parametreyi ayrıştırmalıdır. exit_on_back
değeri true
ise uygulamaların doğrudan geri davranışını uygulaması gerekir.
Kullanıcı derin bağlantıdan sonraki ilk düğmede geri düğmesi dışında bir düğmeye basarsa doğrudan geri gitme ve yalnızca standart geri düğmesi davranışının gerektirdiğini unutmayın.
Örneğin, bir derin bağlantıyı takip ettikten sonra kullanıcının d-pad'in seçim düğmesine bastığını ve bu işlemin sonucunda bir kontrol yer paylaşımının açıldığını varsayalım. Kullanıcı, yer paylaşımının kaybolmasını bekler ve geri düğmesine basar. Derin bağlantı takip edildikten sonra basılan ilk düğme, D-pad'de seçim düğmesi olduğundan, doğrudan geri gitme şartı geçerli değildir. Bunun yerine, normal uygulama geri yığını mantığı geçerli olur.
Geri düğmesine tekrar basmak, kullanıcıyı sonsuz döngüye girmeden uygulama köküne ve ardından tekrar Google TV veya Android TV'ye yönlendirmelidir. Daha fazla bilgi için Tahmin edilebilir geri düğmesi davranışı bölümünü inceleyin.
Navigasyon mimarisi
Sabit başlangıç hedefi
Kullanıcının uygulamayı başlatıcıdan başlattığında gördüğü ilk ekran, aynı zamanda geri düğmesine bastıktan sonra başlatıcıya döndüğünde gördüğü son ekrandır.
Derin bağlantı, manuel gezinmeyi simüle eder.
İster derin bağlantıyla ister manuel olarak belirli bir hedefe gidelim, kullanıcılar geri düğmesini kullanarak hedefler arasında gezinerek başlangıç hedefine gidebilirler.
![Uygulama içindeki ayrıntılar sayfasına yönlendiren derin bağlantıyı gösteren ekran görüntüleri. Geri tuşuna bastığınızda ilgili uygulamanın ana ekranına giderken Geri tuşuna tekrar bastığınızda orijinal ekrana döner.](https://developer.android.com/static/training/tv/images/tv-nav-deeplink.png?authuser=6&hl=tr)
Başka bir uygulamadan bir uygulamaya derin bağlantı oluşturmak, manuel gezinmeyi simüle eder. Örneğin, kullanıcı Google TV'den doğrudan Moviestar uygulamasındaki ayrıntılar sayfasına gidip geri düğmesine basarsa, Moviestar uygulamasının ana sayfasına yönlendirilir.
Odaklanabilir tüm öğelerin yolunu temizle
Kullanıcıların kullanıcı arayüzünü net bir şekilde yönlendirerek gezinmesini sağlayın. Denetime giden düz bir yol yoksa kontrolün yerini değiştirmeyi düşünün.
![Gezinmeye odaklanılabilir örnek](https://developer.android.com/static/training/tv/images/tv-nav-focusable-2.png?authuser=6&hl=tr)
Şunu yapın:
Diğer tıklanabilir öğelerle çakışmayan konumlara kontroller (burada gösterilen arama işlemi gibi) yerleştirin.
![Gezinmeye odaklanılabilir örnek](https://developer.android.com/static/training/tv/images/tv-nav-focusable-1.png?authuser=6&hl=tr)
Şunu yapmayın:
Erişilmesi zor yerlerde kontrol içeren sayfa düzenlerinden kaçının. Burada gösterilen arama işlemine ulaşmayı D-pad ile yönetmek kolay değildir.
Baltalar
Düzeninizi hem yatay hem de dikey eksenlerden yararlanacak şekilde tasarlayın. Her yöne belirli bir işlev vererek büyük hiyerarşilerde gezinmeyi hızlandırın.
![Gezinme eksenleri örneği](https://developer.android.com/static/training/tv/images/tv-nav-axes-1.png?authuser=6&hl=tr)
Şunu yapın:
Kategoriler dikey eksende, her bir kategorideki öğelere yatay eksende göz atılabilir.
![Gezinme eksenleri örneği](https://developer.android.com/static/training/tv/images/tv-nav-axes-2.png?authuser=6&hl=tr)
Şunu yapmayın:
Karmaşık ve iç içe yerleştirilmiş düzen hiyerarşilerinden kaçının.