TV'de gezinme

TV cihazları, uygulamalar için sınırlı bir gezinme kontrolü grubu sağlar. TV uygulamanız için etkili bir gezinme şeması oluşturmak, bu sınırlı kontrolleri ve kullanıcıların uygulamanızı kullanırken karşılaştığı sınırlamaları anlamaya bağlıdır. TV için Android uygulamanızı oluştururken 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üne hakim olmadan veya dikkati içerikten uzaklaştırmadan gezinmenin doğal ve tanıdık hissettirmesidir. Aşağıdaki ilkeler, TV uygulamalarında tutarlı ve sezgisel bir kullanıcı deneyimi için temel oluşturmaya yardımcı olur.

Verimli

İçeriğe erişimi kolaylaştırın. Kullanıcılar, içeriğe en az sayıda tıklamayla hızlıca erişmek ister. Bilgilerinizi en az sayıda ekran gerektirecek şekilde düzenleyin.

Öngörülebilir (Predictable)

Gezinmeyi kullanıcılar için tahmin edilebilir hale getirmek amacıyla en iyi uygulamaları ve önerileri uygulayın. Kafası karışıklığına ve öngörülemezliğe yol açtığı için gezinme kalıplarını gereksiz yere yeniden oluşturmayın.

Sezgisel

Geniş çapta benimsenen kullanıcı davranışlarını sorunsuz bir şekilde desteklemek için gezinmeyi yeterince basitleştirin. Gereksiz gezinme katmanları ekleyerek süreci çok karmaşık hale getirmeyin.

Kumandalar

Denetleyiciler, minimalist uzaktan kumandalardan karmaşık oyun denetleyicilerine kadar çeşitli stillerde sunulur. Tüm kumandalarda yön tuşunun yanı sıra seçme, ana sayfa ve geri düğmeleri bulunur. Diğer düğmeler modele göre değişir.

Televizyon uzaktan kumandası
Şekil 1. TV uzaktan kumandası örneği.

D-pad
TV'de birincil gezinme yöntemi, yukarı, aşağı, sol ve sağ yönlü donanım düğmelerini içeren D-pad'dir. Yön tuşları, odağı bir nesneden basılan düğme yönündeki en yakın nesneye aktarır.

Seçme düğmesi
Odaklanılan ekran öğesini seçer.

Ana sayfa düğmesi
Kullanıcıyı sistemin ana ekranına götürür.

Geri düğmesi
Kullanıcılara önceki görünüme dönme olanağı sunar.

Mikrofon düğmesi
Google Asistan'ı veya ses girişini başlatır.

D-pad ile gezinme

TV cihazlarında kullanıcılar, D-pad veya ok tuşlarını kullanarak gezinir. Bu kontrol türü, hareketi yukarı, aşağı, sola ve sağa doğru sınırlar. TV için optimize edilmiş harika bir uygulama oluşturmak istiyorsanız kullanıcının bu sınırlı kontrolleri kullanarak uygulamanızda nasıl gezineceğini hızlıca öğrenebileceği bir gezinme şeması sağlamanız gerekir.

Android çerçevesi, düzen öğeleri arasındaki yönlü gezinmeyi otomatik olarak işler. Bu nedenle, uygulamanız için genellikle ek bir işlem yapmanız gerekmez. Ancak, gezinmeyle ilgili sorunları tespit etmek için gezinmeyi D-pad denetleyicisiyle kapsamlı bir şekilde test etmeniz gerekir.

Uygulamanızın gezinme sisteminin TV cihazındaki D-pad ile iyi çalıştığını test etmek için aşağıdaki yönergeleri uygulayın:

  • D-pad denetleyicisi olan bir kullanıcının ekrandaki tüm görünür denetimlere gidebildiğinden emin olun.
  • Odaklanılmış kaydırma listelerinde, D-pad'in yukarı ve aşağı düğmelerinin listeyi kaydırdığından, seçme düğmesinin ise 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 kaydırılmaya devam ettiğini doğrulayın.
  • Kontroller arasında geçişin kolay ve tahmin edilebilir olduğundan emin olun.

Yönlü gezinmeyi değiştirme

Android çerçevesi, düzenlerinizdeki odaklanılabilir öğelerin göreli konumuna göre yönlü bir gezinme şemasını otomatik olarak uygular. D-pad denetleyici kullanarak uygulamanızda oluşturulan gezinme şemasını test edin. Testten sonra, kullanıcıların düzenlerinizde belirli bir şekilde ilerlemesini istediğinize karar verirseniz kontrolleriniz için açık yönlü gezinme ayarlayabilirsiniz.

Aşağıdaki kod örneğinde, TextView düzen nesnesi için odağı alacak 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ı için kullanılabilen tüm gezinme özellikleri listelenmiştir:

Özellik İşlev
nextFocusDown Kullanıcı aşağı doğru gittiğinde odağı alacak bir sonraki görünümü tanımlar.
nextFocusLeft Kullanıcı sola gittiğinde odaklanılacak bir sonraki görünümü tanımlar.
nextFocusRight Kullanıcı sağa gittiğinde odağı alacak bir sonraki görünümü tanımlar.
nextFocusUp Kullanıcı yukarı gezinirken 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 olarak ayarlayın. Son kontrolün odağı tekrar ilk kontrole yönlendirmesi için gezinme sırasını döngü olarak ayarladığınızdan emin olun.

Net odaklama ve seçim sağlama

Bir uygulamanın TV cihazlarındaki gezinme şemasının başarısı, kullanıcının hangi kullanıcı arayüzü öğesinin odaklandığını hızlıca belirleyip belirleyememesine bağlıdır. Odaklanılan öğeyi ve dolayısıyla kullanıcının hangi öğe üzerinde işlem yapabileceğini net bir şekilde belirtmezseniz kullanıcılar kısa sürede hayal kırıklığına uğrayıp uygulamanızdan çıkabilir. Aynı nedenle, uygulamanız başladıktan hemen sonra veya boşta kaldığı herhangi bir zamanda kullanıcının üzerinde işlem yapabileceği bir öğeyi her zaman ön planda tutmak önemlidir.

Uygulama düzeninizde ve uygulamanızda, kullanıcıların bir sonraki adımda hangi işlemleri yapabileceklerini belirlemelerine yardımcı olmak için renk, boyut, animasyon veya bu özelliklerin bir kombinasyonunu kullanın. Uygulamanızda odağı belirtmek için tek tip bir şema kullanın.

Android, odaklanılmış ve seçilmiş kontroller için öne çıkan özellikleri uygulamak üzere Drawable durum listesi kaynakları sağlar. Aşağıdaki kod örneği, kullanıcının denetime gidip denetimi seçtiğini belirtmek için bir düğmede görsel davranışın nasıl etkinleştirileceğini gösterir:

<!-- res/drawable/button.xml -->
<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 listesi çizilebilir öğesini Button için uygular:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />

Odaklanılabilir ve seçilebilir kontrollerde, etraflarındaki vurguların net bir şekilde görünmesi için yeterli dolgu sağladığınızdan emin olun.

Geri düğmesiyle gezinme

Platformdaki uygulamalarda tutarlılık sağlamak için geri düğmesinin davranışının bu yönergelere uygun olduğundan emin olun.

Tahmin edilebilir geri düğmesi davranışı kullanma

Basit ve tahmin edilebilir bir gezinme deneyimi oluşturmak için kullanıcı uzaktan kumandanın geri düğmesine bastığında onları önceki hedefe götürün.

Üst gezinme kullanılırken gezinme akışı
Şekil 2. Üst gezinme menüsünü kullanarak Flow'a erişin.
Yan gezinme kullanılırken gezinme akışı
Şekil 3. Yan gezinme panelini kullanarak akış.

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:

  • Uygulama, üst gezinmeyi kullanıyor: Hızlıca kaydırarak ve menüde odağı etkinleştirerek kullanıcıyı sayfanın en üstüne geri götürün.
  • Uygulama, sol gezinmeyi kullanıyor: Sol taraftaki menüyü etkinleştirin ve şu anda etkin olan menü öğesine odaklanın.

Geri düğmesinin onay ekranlarıyla engellenmediğinden veya sonsuz döngüye girmediğinden emin olun.

Kullanıcılara çıkmak isteyip istemedikleri sorulur.
Şekil 4. Çıkış engelleme

Yapmayın.
Çıkış kapısı kullanmaktan kaçının. Kullanıcıların uygulamadan onay almadan çıkmasına izin verin.


Menüyü kapatma ve açma arasında gezinme döngüsü
Şekil 5. Gezinme döngüsü

Yapmayın.
Menüyü kapatıp açma işleminde sonsuz döngüye asla girmez. Geri düğmesine basıldığında uygulamadan çıkılması idealdir. Özel durumlar (ör. çocuk profili) dışında menüde çıkış düğmesi göstermeyin.

Yukarı veya geri düğmesi göstermeyin

Elde taşınan cihazların aksine, uzaktan kumandadaki geri düğmesi TV'de geriye doğru gezinmek için kullanılır. Ekranda sanal geri düğmesi göstermenize gerek yoktur:

Ekranda gösterilen sanal geri düğmesi
Şekil 6. Yumuşak geri düğmesi

Yapmayın.

Gerekirse iptal düğmesi gösterin.

Yalnızca onaylama, yıkıcı veya satın alma işlemleri görünür durumdaysa önceki hedefe dönen bir İptal düğmesi eklemek iyi bir uygulamadır:

Yok edici işlemlerin yanında gösterilen bir iptal düğmesi
Şekil 7. Yumuşak iptal düğmesi.

Yapılacaklar

Geri gezinmeyi uygulama

Android çerçevesi, D-pad'de olduğu gibi genellikle geri gezinmeyi iyi bir şekilde yönetir. Gezinme bileşenini kullanıyorsanız çeşitli gezinme grafiklerini destekleyebilirsiniz. Bazen, geri düğmesinin odağı uzun bir listenin başına sıfırlaması gibi özel davranışlar uygulamanız gerekebilir.

ComponentActivity, FragmentActivity ve AppCompatActivity için temel sınıf olan bu sınıf, getOnBackPressedDispatcher() işlevini çağırarak alabileceğiniz OnBackPressedDispatcher özelliğini kullanarak geri düğmesinin davranışını kontrol etmenize olanak tanır.

Daha fazla bilgi için Özel geri gezinme sağlama başlıklı makaleyi inceleyin.

TV'de oynatma kontrolleri

Video oynatma, TV'deki en önemli özelliklerden biridir. Android TV'deki uygulamalarda video oynatıcıların aynı şekilde çalışması önemlidir. TV'de oynatma kontrolleriyle ilgili yönergelere göz atın.

Canlı sekme gezinme

TV uygulaması kalite koşullarına uymanın yanı sıra Canlı sekmesine entegre edilmiş canlı TV özet akışı içeren uygulamalar, aşağıdaki bölümlerde açıklandığı gibi sorunsuz oynatma ve doğrudan geri gitme koşullarını da karşılamalıdır.

Sorunsuz oynatma

Sorunsuz oynatma, Google TV ve Android TV'deki herhangi bir Canlı veya Lineer kanal derin bağlantısından sonraki uygulama içi davranışlar için geçerlidir.

Kullanıcı bir derin bağlantıyı tıkladığında aşağıdaki kurallar geçerli olur:

  • Gecikme yok: Kullanıcılar, oturum açma veya kaydolma akışları ya da markalama videoları gibi ekranlar engellenmeden veya geciktirilmeden doğrudan kanal oynatmaya yönlendirilmelidir.
  • Soğuk başlatma istisnası: Derin bağlantı, hedef uygulamanın soğuk başlatma ile yüklenmesini başlatırsa başlatma gecikmesine izin verilir. Bu durumda, uygulama başlatma markalama videolarına veya animasyonlarına da izin verilir.
  • Yükleme gecikmesi istisnası: Kanala geçiş birkaç saniye sürüyorsa markalama gösterilmesine izin verilir. Süre yalnızca kanalın yüklenmesi için gereken süre kadar olmalıdır.

Kullanıcının oturumu kapalıysa veya kullanıcı abone değilse oturum açma ya da kaydolma akışını tamamlamak için ücretli kanalda oynatmayı engelleyebilirsiniz.

Direct-back

Kullanıcılar, Canlı sekmesindeki bir derin bağlantıdan uygulamayı başlattıktan sonra geri düğmesine bastığında, ne kadar zaman geçtiğine bakılmaksızın tek bir geri düğmesiyle Canlı sekmesine geri dönmelidir. Bu doğrudan geri yönlendirme davranışı, Google TV ve Android TV'deki tüm Canlı sekmesi derin bağlantıları için gereklidir.

Canlı sekmesi derin bağlantıları, eklenen bir derin bağlantı parametresiyle ayırt edilir: ?exit_on_back=[true|false]. Uygulamaların, uygulamanın Canlı sekmesinden başlatılıp başlatılmadığını belirlemek için bu parametreyi ayrıştırması gerekir. exit_on_back true ise uygulamalar doğrudan geri gitme davranışını uygulamalıdır.

Kullanıcının derin bağlantıdan sonraki ilk düğme olarak geri düğmesi dışında herhangi bir düğmeye basması durumunda doğrudan geri gitme koşulunun geçerli olmayacağını ve yalnızca standart geri düğmesi davranışının gerekli olduğunu unutmayın.

Örneğin, bir kullanıcının derin bağlantıyı takip ettikten sonra D-pad'in seçim düğmesine bastığını ve bunun sonucunda bir kontrol yer paylaşımının açıldığını varsayalım. Kullanıcı, yer paylaşımının kaybolmasını bekler ve ardından geri düğmesine basar. Derin bağlantı izlendikten sonra basılan ilk düğme d-pad seçme düğmesi olduğundan doğrudan geri gitme şartı geçerli değildir. Bunun yerine, normal uygulama geri yığını mantığı geçerlidir.

Geri düğmesine tekrar tekrar basıldığında kullanıcı, sonsuz döngü olmadan önce uygulamanın kök dizinine, ardından Google TV veya Android TV'ye yönlendirilmelidir. Daha fazla bilgi için Tahmin edilebilir geri düğmesi davranışı bölümüne bakın.

İyi tanımlanmış bir gezinme mimarisi, kullanıcıların uygulamanızda nerede olduklarını ve farklı içeriklere nasıl erişeceklerini anlamalarına yardımcı olur. Gezinme tasarımının aşağıdaki yönlerini göz önünde bulundurun.

Sabit başlangıç hedefi

Kullanıcının başlatıcıdan uygulamayı başlattığında gördüğü ilk ekran, 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

Derin bağlantı veya belirli bir hedefe manuel olarak gitme durumlarında kullanıcılar, hedefler arasında gezinmek ve başlangıç hedefine geri dönmek için geri düğmesini kullanabilir.

Bir uygulamanın ayrıntılar sayfasına giden derin bağlantıyı gösteren ekran görüntüleri.
            Geri düğmesine basıldığında uygulamanın ana ekranına gidilir ve tekrar geri düğmesine basıldığında
            orijinal ekrana dönülür.
Şekil 8. Ayrıntılar sayfasına derin bağlantı oluşturma.

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 bir ayrıntılar sayfasına giderse ve ardından geri düğmesine basarsa Moviestar uygulamasının ana sayfasına yönlendirilir.

Odaklanılabilir tüm öğelere giden yolu temizleme

Kullanıcıların, kullanıcı arayüzünüzde net bir şekilde gezinmesine izin verin. Bir kontrolü kullanmak için doğrudan bir yol yoksa kontrolü taşımayı düşünebilirsiniz.

Kontrollerin çakışmayan konumlara yerleştirildiği bir düzen
Şekil 9. Odaklanılabilirliği kontrol edin.

Yapın.
Burada gösterilen arama işlemi gibi kontrolleri, diğer tıklanabilir öğelerle çakışmayan konumlara yerleştirin.

Ulaşılması zor yerlerde kontrollerin bulunduğu bir düzen
Şekil 10. Odaklanılabilirliği kontrol edin.

Yapmayın.
Ulaşılması zor yerlerde kontroller içeren düzenlerden kaçının. Burada gösterilen arama işlemine D-pad ile ulaşmak zor olabilir.

Eksen

Düzeninizi hem yatay hem de dikey eksenlerden yararlanacak şekilde tasarlayın. Her yöne belirli bir işlev atayarak büyük hiyerarşilerde hızlı bir şekilde gezinmenizi sağlar.

Dikey kategoriler ve yatay öğeler içeren bir düzen
Şekil 11. Geçiş.

Yapılacaklar
Kategoriler dikey eksende, her kategorideki öğeler ise yatay eksende gezilebilir.

Karmaşık ve iç içe yerleştirilmiş bir düzen hiyerarşisi
Şekil 12. Geçiş.

Yapmayın.
Karmaşık ve iç içe yerleşim hiyerarşilerinden kaçının.