Android TV'de özel görünüm erişilebilirliği desteği

Birçok Android TV uygulaması yerel Android bileşenleriyle geliştirilmiş olsa da, özellikle özel görünümleri kullanırken üçüncü taraf çerçevelerin veya bileşenlerinin erişilebilirliğinin dikkate alınması da önemlidir.

Doğrudan OpenGL veya Tuval ile arayüz oluşturan özel görünüm bileşenleri, TalkBack ve Anahtar Erişimi gibi erişilebilirlik hizmetleriyle düzgün çalışmayabilir.

TalkBack açıkken oluşabilecek aşağıdaki sorunlardan bazılarını düşünün:

  • Erişilebilirlik odağı (yeşil dikdörtgen) uygulamanızda kaybolabilir.
  • Erişilebilirlik odağı tüm ekranın sınırını seçebilir.
  • Erişilebilirlik odağı taşınabilir olmayabilir.
  • Kodunuz bunları kullanıyor olsa bile D-pad'deki dört yön tuşlarının hiçbir etkisi olmayabilir.

Uygulamanızda bu sorunlardan herhangi birini fark ederseniz AccessibilityNodeInfo ağacının erişilebilirlik hizmetlerine açık olduğundan emin olun.

Bu kılavuzun geri kalan bölümünde, bu sorunları gidermek için bazı çözümler ve en iyi uygulamalar sağlanmaktadır.

D-pad etkinlikleri, erişilebilirlik hizmetleri tarafından tüketilir

Bu sorunun temel nedeni, önemli etkinliklerin erişilebilirlik hizmetleri tarafından tüketilmesidir.

Dpad etkinliklerinin tüketimi Şekil 1. TalkBack açık ve kapalı durumdayken sistemin nasıl çalıştığını gösteren diyagramlar.

Şekil 1'de gösterildiği gibi, TalkBack açıldığında, D-pad etkinlikleri geliştirici tarafından tanımlanan D-pad işleyiciye iletilmez. Bunun yerine, erişilebilirlik hizmetleri önemli etkinlikleri alır ve böylece erişilebilirlik odağını taşıyabilir. Özel Android bileşenleri varsayılan olarak erişilebilirlik hizmetlerine ekrandaki konumları ile ilgili bilgileri göstermediğinden erişilebilirlik hizmetleri bunları vurgulamak için erişilebilirlik odağını hareket ettiremez.

Diğer erişilebilirlik hizmetleri de benzer şekilde etkilenir: Anahtar Erişimi kullanılırken D-pad etkinlikleri de tüketilebilir.

D-pad etkinlikleri erişilebilirlik hizmetlerine gönderildiğinden ve bu hizmet, kullanıcı arayüzü bileşenlerinin özel görünümde nerede olduğunu bilmediği için önemli etkinlikleri doğru şekilde yönlendirmek amacıyla uygulamanızda AccessibilityNodeInfo özelliğini uygulamanız gerekir.

Erişilebilirlik hizmetleriyle ilgili bilgileri paylaşın

Erişilebilirlik hizmetlerine özel görünümlerin konumu ve açıklamasıyla ilgili yeterli bilgiyi sağlamak için her bileşenle ilgili ayrıntıları göstermek üzere AccessibilityNodeInfo özelliğini uygulayın. Erişilebilirlik hizmetlerinin odağı yönetebilmesi amacıyla görünümlerin mantıksal ilişkisini tanımlamak için ExploreByTouchHelper özelliğini uygulayın ve özel görünümler için ViewCompat.setAccessibilityDelegate(View, AccessibilityDelegateCompat) kullanarak ayarlayın.

ExploreByTouchHelper yöntemini uygularken dört soyut yöntemi geçersiz kılın:

Kotlin

// Return the virtual view ID whose view is covered by the input point (x, y).
protected fun getVirtualViewAt(x: Float, y: Float): Int

// Fill the virtual view ID list into the input parameter virtualViewIds.
protected fun getVisibleVirtualViews(virtualViewIds: List<Int>)

// For the view whose virtualViewId is the input virtualViewId, populate the
// accessibility node information into the AccessibilityNodeInfoCompat parameter.
protected fun onPopulateNodeForVirtualView(virtualViewId: Int, @NonNull node: AccessibilityNodeInfoCompat)

// Set the accessibility handling when perform action.
protected fun onPerformActionForVirtualView(virtualViewId: Int, action: Int, @Nullable arguments: Bundle): Boolean

Java

// Return the virtual view ID whose view is covered by the input point (x, y).
protected int getVirtualViewAt(float x, float y)

// Fill the virtual view ID list into the input parameter virtualViewIds.
protected void getVisibleVirtualViews(List<Integer> virtualViewIds)

// For the view whose virtualViewId is the input virtualViewId, populate the
// accessibility node information into the AccessibilityNodeInfoCompat parameter.
protected void onPopulateNodeForVirtualView(int virtualViewId, @NonNull AccessibilityNodeInfoCompat node)

// Set the accessibility handling when perform action.
protected boolean onPerformActionForVirtualView(int virtualViewId, int action, @Nullable Bundle arguments)

Daha ayrıntılı bilgi için Google I/O 2013 - Android'de Görme Engelli ve Görme Engellilere Uygun Erişilebilirliği Etkinleştirme videosunu izleyin veya erişilebilirlik etkinliklerini doldurma hakkında daha fazla bilgi edinin.

En iyi uygulamalar

Örnek

Özel görünümler kullanarak uygulamalara erişilebilirlik desteği eklemeyle ilgili en iyi uygulamaları görmek için Android TV için özel görünüm erişilebilirlik örneğine bakın.