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.
Ş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
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:
AccessibilityNodeInfo.getContentDescription()
, Talkback'in duyuracağı içerik açıklamasını belirtmelidir.Hizmetlerin bileşen türünü ayırt edebilmesi için
AccessibilityNodeInfo.setClassName()
değerini belirtin.performAction()
uygulamasını uygularken ilgili birAccessibilityEvent
kullanarak işlemi yansıtın.ACTION_CLICK
gibi daha fazla işlem türü uygulamak içinperformAction()
içindeki ilgili mantığı kullanarakAccessibilityNodeInfo.addAction(ACTION_CLICK)
yöntemini çağırın.Uygun durumlarda
setFocusable()
,setClickable()
,setScrollable()
ve benzer yöntemler için bileşen durumunu yansıtın.Erişilebilirlik hizmetlerinin bileşenlerinizle daha iyi etkileşim kurması için diğer yöntemleri belirlemek için
AccessibilityNodeInfo
dokümanlarını inceleyin.
Ö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.