Birçok Android TV uygulaması yerel Android bileşenleriyle oluşturulsa da özellikle özel görünümler kullanılırken üçüncü taraf çerçevelerinin veya bileşenlerinin erişilebilirliğini de göz önünde bulundurmak önemlidir.
Doğrudan OpenGL veya Canvas ile arayüz oluşturan özel görünüm bileşenleri, Talkback ve Anahtarla Erişim gibi erişilebilirlik hizmetleriyle düzgün çalışmayabilir.
TalkBack açıkken oluşabilecek bazı sorunlar:
- Erişilebilirlik odağı (yeşil dikdörtgen) uygulamanızda kaybolabilir.
- Erişilebilirlik odağı, ekranın tamamının sınırını seçebilir.
- Erişilebilirlik odağı taşınamayabilir.
- Kodunuz bu tuşları işliyor olsa bile D-pad'deki dört yön tuşunun etkisi olmayabilir.
Uygulamanızda bu sorunlardan herhangi birini gözlemlerseniz uygulamanızın AccessibilityNodeInfo ağacını erişilebilirlik hizmetlerine sunduğundan emin olun.
Bu kılavuzun geri kalanında, bu sorunları gidermeye yönelik bazı çözümler ve en iyi uygulamalar sunulmaktadır.
D-pad etkinlikleri, erişilebilirlik hizmetleri tarafından kullanılır.
Bu sorunun temel nedeni, önemli etkinliklerin erişilebilirlik hizmetleri tarafından kullanılmasıdır.
Şekil 1'de gösterildiği gibi, TalkBack açıldığında D-pad etkinlikleri, geliştirici tarafından tanımlanan D-pad işleyicisine iletilmez. Bunun yerine, erişilebilirlik hizmetleri, erişilebilirlik odağını taşıyabilmek için tuş etkinliklerini alır. Özel Android bileşenleri, varsayılan olarak ekrandaki konumlarıyla ilgili bilgileri erişilebilirlik hizmetlerine göstermediğinden erişilebilirlik hizmetleri, erişilebilirlik odağını bu bileşenleri vurgulayacak şekilde taşıyamaz.
Diğer erişilebilirlik hizmetleri de benzer şekilde etkilenir: Anahtarla Erişim kullanılırken D-pad etkinlikleri de tüketilebilir.
D-pad etkinlikleri erişilebilirlik hizmetlerine gönderildiğinden ve bu hizmet özel görünümdeki kullanıcı arayüzü bileşenlerinin nerede olduğunu bilmediğinden, uygulamanızın tuş etkinliklerini doğru şekilde yönlendirmesi için AccessibilityNodeInfo işlevini uygulamanız gerekir.
Erişilebilirlik hizmetlerine bilgi gösterme
Erişilebilirlik hizmetlerine özel görünümlerin konumu ve açıklaması hakkında yeterli bilgi sağlamak için her bileşenin ayrıntılarını göstermek üzere AccessibilityNodeInfo özelliğini uygulayın. Görünümlerin mantıksal ilişkisini tanımlamak için
böylece erişilebilirlik hizmetleri odağı yönetebilir, ExploreByTouchHelper öğesini uygulayın ve özel görünümler için ViewCompat.setAccessibilityDelegate(View, AccessibilityDelegateCompat) kullanarak ayarlayın.
ExploreByTouchHelper öğesini uygularken dört soyut yöntemini 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 fazla bilgi için Google I/O 2013 - Enabling Blind and Low-Vision Accessibility on Android (Google I/O 2013 - Android'de Görme Engelli ve Az Gören Kullanıcılar İçin Erişilebilirlik Özelliklerini Etkinleştirme) başlıklı videoyu izleyin veya erişilebilirlik etkinliklerini doldurma hakkında daha fazla bilgi edinin.
En iyi uygulamalar
Zorunlu:
AccessibilityNodeInfo.getBoundsInScreen(), bileşenin konumunu tanımlamalıdır.Zorunlu:
AccessibilityNodeInfo.setVisibleToUser(), bileşenin görünürlüğünü yansıtmalıdır.Zorunlu: TalkBack'in duyurması için
AccessibilityNodeInfo.getContentDescription()öğesi, içerik açıklamasını belirtmelidir.Hizmetlerin bileşen türünü ayırt edebilmesi için
AccessibilityNodeInfo.setClassName()değerini belirtin.performAction()uygulanırken işlemi, ilgili birAccessibilityEventkullanarak yansıtın.ACTION_CLICKgibi daha fazla işlem türü uygulamak içinAccessibilityNodeInfo.addAction(ACTION_CLICK)öğesiniperformAction()içindeki ilgili mantığı kullanarak çağırın.Geçerli olduğunda
setFocusable(),setClickable(),setScrollable()ve benzeri yöntemler için bileşen durumunu yansıtın.Erişilebilirlik hizmetlerinin bileşenlerinizle daha iyi etkileşim kurabileceği diğer yolları belirlemek için
AccessibilityNodeInfodokümanlarını inceleyin.
Örnek
Özel görünümleri kullanan uygulamalara erişilebilirlik desteği eklemeyle ilgili en iyi uygulamaları görmek için Android TV'de özel görünüm erişilebilirliği örneğini inceleyin.