Çoğu Android TV uygulaması yerel Android bileşenleriyle geliştirilmiş olsa da üçüncü tarafların, içeriklerinizin ve yayınlarınızın çerçeveleri veya bileşenleri, özellikle özel görünümler kullanırken.
Doğrudan OpenGL veya Canvas ile arayüz oluşturan özel görünüm bileşenleri iyi çalışmayabilir TalkBack ve Anahtar Erişimi gibi erişilebilirlik hizmetleriyle birlikte çalışır.
TalkBack'e geçildiğinde ortaya çıkabilecek aşağıdaki sorunlardan bazılarını göz önünde bulundurun tarih:
- 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ı işliyor olsa bile D-pad'deki dört yön tuşlarının herhangi bir etkisi olmayabilir.
Uygulamanızda bu sorunlardan herhangi birini gözlemlerseniz
Uygulama, AccessibilityNodeInfo
özelliğini kullanıma sundu
erişilebilirlik hizmetlerine ekliyoruz.
Bu kılavuzun geri kalanında, bu sorunları ele almaya yönelik bazı çözümler ve en iyi uygulamalar açıklanmaktadır.
D-pad etkinlikleri, erişilebilirlik hizmetleri tarafından tüketilir
Bu sorunun temel nedeni, önemli etkinliklerin erişilebilirlik tarafından tüketilmesidir. kullanıma sunuyoruz.
.
Şekil 1. TalkBack açık ve kapalı durumdayken sistemin nasıl çalıştığını gösteren şemalar.
Şekil 1'de gösterildiği gibi TalkBack açıkken D-pad etkinlikleri geliştirici tarafından tanımlanan D-pad işleyicisine iletilmez. Bunun yerine Erişilebilirlik hizmetlerinin önemli etkinlikleri alarak erişilebilirlik odağı. Özel Android bileşenleri varsayılan olarak erişilebilirlik hizmetlerine dair bilgileri, erişilebilirlik hizmetleri, erişilebilirlik odağını öne çıkaracak şekilde hareket ettiremez.
Diğer erişilebilirlik hizmetleri de benzer şekilde etkileniyor: D-pad etkinlikleri de emin olun.
D-pad etkinlikleri erişilebilirlik hizmetlerine gönderildiğinden ve
söz konusu hizmet, kullanıcı arayüzü bileşenlerinin özel görünümdeki yerini
AccessibilityNodeInfo
doğru şekilde hazırlamanız gerekir.
Bilgileri erişilebilirlik hizmetlerine sunma
Erişilebilirlik hizmetlerine
konumu ve açıklaması için AccessibilityNodeInfo
uygulayın
her bileşene ait ayrıntıları gösterir.
Erişilebilirlik hizmetlerinin şunları yapabilmesi için görünümlerin mantıksal ilişkisini
odağı yönetme, uygulama ExploreByTouchHelper
ve
ViewCompat.setAccessibilityDelegate(View, AccessibilityDelegateCompat)
kullanabilirsiniz.
ExploreByTouchHelper
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 şu videoyu izleyin: Google I/O 2013 - Activation Blind and Low-Vision Android'de erişilebilirlik 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.AccessibilityNodeInfo.setClassName()
değerini belirtin Böylece hizmetler bileşen türünü ayırt edebilir.performAction()
uygulanırken ilgili birAccessibilityEvent
kullanarak işlemi yansıtmalıdır.ACTION_CLICK
gibi diğer işlem türlerini uygulamak için şunu çağırın:AccessibilityNodeInfo.addAction(ACTION_CLICK)
kullanarakperformAction()
içindeki ilgili mantığı kullanabilirsiniz.Geçerli olduğunda
setFocusable()
,setClickable()
,setScrollable()
, ve benzer yöntemler.AccessibilityNodeInfo
ile ilgili dokümanları inceleyin erişilebilirlik hizmetlerinin daha iyi etkileşim kurabileceği diğer bileşenlerine ayıralım.
Örnek
Android TV için özel görünüm erişilebilirlik örneğine göz atarak Özel görünümler kullanarak uygulamalara erişilebilirlik desteği eklenmesi.