Uygulamanız için bir özel görünüm bileşeni görünümü daha erişilebilir hale getirmelisiniz. Aşağıdaki adımlar, özel görünümünüzün erişilebilirlik özellikleri:
- Yönlü kumanda tıklamalarını işleme.
- Erişilebilirlik API'si yöntemlerini uygulayın.
AccessibilityEvent
gönder özel görünümünüze özgü nesneleri içerir.AccessibilityEvent
alanını doldur veAccessibilityNodeInfo
görüntüleme sayısını artırır.
Yönlü kumanda tıklamalarını işleme
Çoğu cihazda, yönlü kumanda kullanarak bir görünümü tıkladığınızda
KeyEvent
KEYCODE_DPAD_CENTER
şu anda odakta olan görünümü seçin. Tüm standart Android görünümleri tutma yeri
KEYCODE_DPAD_CENTER
uygun bir şekilde belirleyin. Özel bir kitle oluştururken
View
.
Bu etkinliğin, dokunmatik ekrandaki görünüme dokunmayla aynı etkiye sahip olduğundan emin olun.
Özel denetiminiz
KEYCODE_ENTER
.
etkinlik KEYCODE_DPAD_CENTER
ile aynı. Bu şekilde, tam bir klavyeyle etkileşimler kurulur.
hale getirmiştir.
Accessibility API yöntemlerini uygulayın
Erişilebilirlik etkinlikleri, kullanıcıların Uygulamanızın görsel arayüzüyle etkileşimler
bileşenlerine ayıralım. Bu iletiler, mevcut erişilebilirlik hizmetleri olan erişilebilirlik hizmetleri tarafından işlenir.
bu etkinliklerdeki bilgileri kullanarak tamamlayıcı geri bildirim ve istem üretebileceksiniz. Erişilebilirlik
yöntemleri View
kapsamındadır
View.AccessibilityDelegate
sınıflar. Yöntemler şu şekildedir:
dispatchPopulateAccessibilityEvent()
onPopulateAccessibilityEvent()
çağrısı yapar
ve ardından bunun her bir alt öğesi için dispatchPopulateAccessibilityEvent()
yöntemi
görünüm. onInitializeAccessibilityEvent()
TextView
veya
Button
, bu yöntemi geçersiz kıl
ve görünümünüzle ilgili ek bilgileri (şifre alanı türü, onay kutusu gibi) ayarlayın
etkinliği sağlayan kullanıcı etkileşimi veya geri bildirimi sağlayan, tür,
yöntemidir. Bu yöntemi geçersiz kılarsanız süper uygulamasını çağırın ve yalnızca özellikleri değiştirin
üst sınıf tarafından ayarlanmaz.onInitializeAccessibilityNodeInfo()
View
uygulamasının standart bir görünüm özellikleri grubu vardır ancak
özel görünüm, basit bir TextView
veya
Button
, bu yöntemi geçersiz kılıp görünümünüzle ilgili ek bilgileri ayarlayın
bu yöntemle işlenen AccessibilityNodeInfo
nesnesine eklenir.onPopulateAccessibilityEvent()
AccessibilityEvent
cihazının sözlü metin istemini
görünüm. Görünüm, erişilebilirlik oluşturan bir görünümün alt öğesi olduğunda da kullanılır
unutmayın.
onRequestSendAccessibilityEvent()
AccessibilityEvent
. Bu adım, ebeveyn görünümünün erişilebilirliği değiştirmesine olanak tanır.
ek bilgi içeren bir etkinliktir. Bu yöntemi yalnızca özel görünümünüzde
ve ebeveyn görünümünün, erişilebilirlikle ilgili bağlam bilgileri sağlayıp sağlayamayacağı
erişilebilirlik hizmetleri için yararlı bir etkinliktir.sendAccessibilityEvent()
- Kullanıcı bir görüntülemeyle ilgili işlem yaptığında sistem bu yöntemi çağırır. Etkinlik şununla sınıflandırılır:
TYPE_VIEW_CLICKED
gibi bir kullanıcı işlemi türü. Genel olarak, Özel görünümünüzün içeriği her değiştiğindeAccessibilityEvent
. sendAccessibilityEventUnchecked()
- Bu yöntem, çağrı kodunun doğrudan
cihazda erişilebilirlik özelliğinin etkinleştirilmesi
(
AccessibilityManager.isEnabled()
). Bu yöntemi uygularsanız çağrıyı, sistem ayarı var. Genellikle bu yöntemi özel bir görünüm için uygulamanız gerekmez. dispatchPopulateAccessibilityEvent()
onInitializeAccessibilityEvent()
onInitializeAccessibilityNodeInfo()
onPopulateAccessibilityEvent()
TYPE_VIEW_CLICKED
TYPE_VIEW_FOCUSED
TYPE_VIEW_HOVER_ENTER
TYPE_VIEW_HOVER_EXIT
TYPE_VIEW_LONG_CLICKED
TYPE_VIEW_SCROLLED
- Yorumlanan tıklama işlemi için uygun bir
AccessibilityEvent
oluşturun. - Yapamayan kullanıcılar için özel tıklama işlemini gerçekleştirmek üzere erişilebilirlik hizmetlerini etkinleştirin dokunmatik ekran kullanın.
Erişilebilirliği desteklemek için önceki erişilebilirlik yöntemlerini doğrudan özel görünüm sınıfınızı seçin.
En azından, özel görünüm sınıfınız için aşağıdaki erişilebilirlik yöntemlerini uygulayın:
Bu yöntemlerin uygulanmasıyla ilgili daha fazla bilgi için erişilebilirlik etkinliklerini doldurma.
Erişilebilirlik etkinlikleri gönder
Özel görünümünüzün ayrıntılarına bağlı olarak,
Farklı zamanlarda veya varsayılan olarak işlenmeyen etkinlikler için AccessibilityEvent
nesne
hakkında bilgi edindiniz. View
sınıfı, bu etkinlikler için varsayılan bir uygulama sağlar.
türler:
Genel olarak, özel içeriğinizin içeriği her zaman bir AccessibilityEvent
görüntülemenizi sağlar. Örneğin, kullanıcının bir metin seçmesine izin veren özel bir kaydırma çubuğu
sayısal değer için sol veya sağ ok tuşuna bastığınızda, özel görünümünüz
TYPE_VIEW_TEXT_CHANGED
.
her zaman kaydırma çubuğu değeri değişir. Aşağıdaki kod örneğinde,
Bu etkinliği bildirmek için sendAccessibilityEvent()
yöntemini kullanın.
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when(keyCode) { KeyEvent.KEYCODE_DPAD_LEFT -> { currentValue-- sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED) true } ... } }
Java
@Override public boolean onKeyUp (int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { currentValue--; sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED); return true; } ... }
Erişilebilirlik etkinliklerini doldur
Her AccessibilityEvent
, geçerli etiketi açıklayan bir dizi zorunlu özelliğe sahiptir.
görünümünün durumudur. Bu özellikler görünümün sınıf adı ve içeriği gibi bilgileri içerir.
ve işaretli durumda gösterilir. Her etkinlik türü için gereken belirli özellikler aşağıda açıklanmıştır
AccessibilityEvent
.
referans belgeler.
View
uygulaması, bunlar için varsayılan değerler sağlar
zorunlu özellikler. Sınıf adı ve etkinlik zaman damgası da dahil olmak üzere bu değerlerin çoğu
otomatik olarak sağlanır. Özel görünüm bileşeni oluşturuyorsanız
o görünümün içeriği ve özellikleri hakkında. Bu bilgiler bir düğme kadar basit olabilir
etiketi içerir ve etkinliğe eklemek istediğiniz ek durum bilgilerini içerebilir.
Şunu kullanın:
onPopulateAccessibilityEvent()
.
ve
onInitializeAccessibilityEvent()
yöntemlerine göz atın.AccessibilityEvent
Şunu kullanın:
Özellikle metin eklemek veya değiştirmek için kullanılan onPopulateAccessibilityEvent()
yöntemi
gibi erişilebilirlik hizmetleri tarafından sesli istemlere dönüştürülür.
TalkBack'e gidin. Ek doldurma için onInitializeAccessibilityEvent()
yöntemini kullanın
görünümün seçim durumu gibi etkinlikle ilgili bilgileri sağlar.
Ayrıca,
onInitializeAccessibilityNodeInfo()
.
yöntemidir. Erişilebilirlik hizmetleri, bu tarafından doldurulan AccessibilityNodeInfo
nesnelerini kullanır
bir erişilebilirlik etkinliği alındıktan sonra oluşturan görünüm hiyerarşisini inceleme yöntemidir.
ve kullanıcılara uygun geri bildirimler sağlayın.
Aşağıdaki kod örneğinde, bu üç yöntemin görünümünüzde nasıl geçersiz kılınacağı gösterilmektedir:
Kotlin
override fun onPopulateAccessibilityEvent(event: AccessibilityEvent?) { super.onPopulateAccessibilityEvent(event) // Call the super implementation to populate its text for the // event. Then, add text not present in a super class. // You typically only need to add the text for the custom view. if (text?.isNotEmpty() == true) { event?.text?.add(text) } } override fun onInitializeAccessibilityEvent(event: AccessibilityEvent?) { super.onInitializeAccessibilityEvent(event) // Call the super implementation to let super classes // set appropriate event properties. Then, add the new checked // property that is not supported by a super class. event?.isChecked = isChecked() } override fun onInitializeAccessibilityNodeInfo(info: AccessibilityNodeInfo?) { super.onInitializeAccessibilityNodeInfo(info) // Call the super implementation to let super classes set // appropriate info properties. Then, add the checkable and checked // properties that are not supported by a super class. info?.isCheckable = true info?.isChecked = isChecked() // You typically only need to add the text for the custom view. if (text?.isNotEmpty() == true) { info?.text = text } }
Java
@Override public void onPopulateAccessibilityEvent(AccessibilityEvent event) { super.onPopulateAccessibilityEvent(event); // Call the super implementation to populate its text for the // event. Then, add the text not present in a super class. // You typically only need to add the text for the custom view. CharSequence text = getText(); if (!TextUtils.isEmpty(text)) { event.getText().add(text); } } @Override public void onInitializeAccessibilityEvent(AccessibilityEvent event) { super.onInitializeAccessibilityEvent(event); // Call the super implementation to let super classes // set appropriate event properties. Then, add the new checked // property that is not supported by a super class. event.setChecked(isChecked()); } @Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); // Call the super implementation to let super classes set // appropriate info properties. Then, add the checkable and checked // properties that are not supported by a super class. info.setCheckable(true); info.setChecked(isChecked()); // You typically only need to add the text for the custom view. CharSequence text = getText(); if (!TextUtils.isEmpty(text)) { info.setText(text); } }
Bu yöntemleri doğrudan özel görünüm sınıfınızda uygulayabilirsiniz.
Özelleştirilmiş bir erişilebilirlik bağlamı sağlayın
Erişilebilirlik hizmetleri, bir kullanıcı arayüzü bileşeninin kapsayıcı görünüm hiyerarşisini inceleyebilir erişilebilirlik etkinliği oluşturur. Bu sayede erişilebilirlik hizmetleri, bağlam açısından daha zengin içerikler sunabilir e-posta alırsınız.
Erişilebilirlik hizmetlerinin görünümden yeterli bilgi alamadığı durumlar hiyerarşik olarak düzenlenmiştir. Buna örnek olarak, iki veya daha fazla ayrı ayar içeren özel bir arayüz denetimi verilebilir. tıklanabilir alanları (örneğin, takvim denetimi gibi) tıklayın. Bu durumda, hizmetler Tıklanabilir alt bölümler görünüm hiyerarşisinin bir parçası olmadığı için görüntülenebilir.
![](https://developer.android.com/static/guide/topics/ui/accessibility/calendar.png?authuser=19&hl=tr)
Şekil 1. Seçilebilir gün öğeleri içeren özel bir takvim görünümü.
Şekil 1'deki örnekte, takvimin tamamı tek bir görünüm olarak uygulanmıştır. Dolayısıyla, görünümün içeriği ve kullanıcının seçimi hakkında yeterli bilgi almadığında veya geliştirici ek bilgi sağlamadığı sürece görünümün içinde yer alır. Örneğin, bir kullanıcı 17 tarihinde erişilebilirlik çerçevesi yalnızca açıklama bilgilerini alır. sahip olacaksınız. Bu durumda, TalkBack erişilebilirlik hizmeti "Takvim" veya "Nisan Takvimi" gibi ve kullanıcı hangi günün seçildiğini bilmez.
Bu gibi durumlarda erişilebilirlik hizmetleri için yeterli bağlam bilgisi sağlamak amacıyla çerçeve, sanal görünüm hiyerarşisini belirtmenin bir yolunu sunar. Sanal görünüm hiyerarşisi, erişilebilirlik hizmetleri için tamamlayıcı bir görünüm hiyerarşisi sağlamalarına olanak tanır. ekrandaki bilgilerle yakından eşleşiyor. Bu yaklaşım sayesinde erişilebilirlik hizmetleri, bağlam bilgisi sunar.
Sanal görünüm hiyerarşisinin gerekli olabileceği bir diğer durum,
yakından alakalı işlevlere sahip View
kontrolü grubu (bir öğedeki işlem
kontrolü, bir veya daha fazla öğenin içeriğini etkiler. örneğin, ayrı öğeler içeren bir sayı seçici
ve aşağı düğmelerini kullanın. Bu durumda erişilebilirlik hizmetleri,
bir kontrol üzerindeki işlem, diğerindeki içeriği değiştirirken bu denetimlerin ilişkisi
hizmeti açıklığa kavuşturmaktır.
Bu durumu ele almak için, ilgili denetimleri içeren bir görünümle gruplandırın ve sanal bir tarafından sağlanan bilgileri ve davranışları açıkça temsil edecek şekilde, bu kapsayıcıdan bir hiyerarşiye kontrol eder.
Bir görünüme sanal görünüm hiyerarşisi sağlamak için
getAccessibilityNodeProvider()
.
yöntemini çağırın ve şunu döndürür:
AccessibilityNodeProvider
.
Destek Kitaplığı'nı
ViewCompat.getAccessibilityNodeProvider()
.
yöntemini kullanarak
AccessibilityNodeProviderCompat
.
Erişilebilirlik hizmetlerine bilgi sağlama ve
erişilebilirlik odağı olarak
ExploreByTouchHelper
Bir AccessibilityNodeProviderCompat
sağlar ve bir görünüme
Telefon ederek AccessibilityDelegateCompat
setAccessibilityDelegate
.
Örnek için bkz.
ExploreByTouchHelperActivity
ExploreByTouchHelper
, şunun gibi çerçeve widget'ları tarafından da kullanılır:
CalendarView
, kendi
çocuk ekranı
SimpleMonthView
.
Özel dokunma etkinliklerini yönet
Özel görünüm kontrolleri, örneklere göz atın.
Tıklamaya dayalı işlemleri tanımlayın
Widget'ınız
OnClickListener
veya
OnLongClickListener
arayüz üzerinde, sistem
ACTION_CLICK
ve
ACTION_LONG_CLICK
işlem olarak görebilirsiniz. Uygulamanız aşağıdakileri temel alan daha özelleştirilmiş bir widget kullanıyorsa
OnTouchListener
arayüzü,
Tıklamaya dayalı erişilebilirlik işlemleri için özel işleyiciler tanımlayabilirsiniz. Bunu yapmak için
replaceAccessibilityAction()
yöntemini çağırın.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... // Assumes that the widget is designed to select text when tapped, and selects // all text when tapped and held. In its strings.xml file, this app sets // "select" to "Select" and "select_all" to "Select all". ViewCompat.replaceAccessibilityAction( binding.textSelectWidget, ACTION_CLICK, getString(R.string.select) ) { view, commandArguments -> selectText() } ViewCompat.replaceAccessibilityAction( binding.textSelectWidget, ACTION_LONG_CLICK, getString(R.string.select_all) ) { view, commandArguments -> selectAllText() } }
Java
@Override protected void onCreate(Bundle savedInstanceState) { ... // Assumes that the widget is designed to select text when tapped, and select // all text when tapped and held. In its strings.xml file, this app sets // "select" to "Select" and "select_all" to "Select all". ViewCompat.replaceAccessibilityAction( binding.textSelectWidget, ACTION_CLICK, getString(R.string.select), (view, commandArguments) -> selectText()); ViewCompat.replaceAccessibilityAction( binding.textSelectWidget, ACTION_LONG_CLICK, getString(R.string.select_all), (view, commandArguments) -> selectAllText()); }
Özel tıklama etkinlikleri oluşturun
Özel bir kontrol, onTouchEvent(MotionEvent)
öğesini kullanabilir
dinleyici yöntemini kullanarak
ACTION_DOWN
ve
ACTION_UP
etkinlik ve
özel bir tıklama etkinliği tetikleyin. Erişilebilirlik hizmetleriyle uyumluluğu sürdürmek için
işleyicilerin aşağıdakileri yapması gerekir:
Bu gereksinimlerin verimli şekilde yerine getirilmesi için kodunuz,
performClick()
yöntem,
Bunlar, bu yöntemin süper uygulamasını çağırır ve ardından istediğiniz işlemleri
tıklama etkinliği için gereklidir. Özel tıklama işlemi algılandığında, bu kod daha sonra
performClick()
yöntemini çağırın. Aşağıdaki kod örneğinde bu kalıp gösterilmektedir.
Kotlin
class CustomTouchView(context: Context) : View(context) { var downTouch = false override fun onTouchEvent(event: MotionEvent): Boolean { super.onTouchEvent(event) // Listening for the down and up touch events. return when (event.action) { MotionEvent.ACTION_DOWN -> { downTouch = true true } MotionEvent.ACTION_UP -> if (downTouch) { downTouch = false performClick() // Call this method to handle the response and // enable accessibility services to // perform this action for a user who can't // tap the touchscreen. true } else { false } else -> false // Return false for other touch events. } } override fun performClick(): Boolean { // Calls the super implementation, which generates an AccessibilityEvent // and calls the onClick() listener on the view, if any. super.performClick() // Handle the action for the custom click here. return true } }
Java
class CustomTouchView extends View { public CustomTouchView(Context context) { super(context); } boolean downTouch = false; @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); // Listening for the down and up touch events switch (event.getAction()) { case MotionEvent.ACTION_DOWN: downTouch = true; return true; case MotionEvent.ACTION_UP: if (downTouch) { downTouch = false; performClick(); // Call this method to handle the response and // enable accessibility services to // perform this action for a user who can't // tap the touchscreen. return true; } } return false; // Return false for other touch events. } @Override public boolean performClick() { // Calls the super implementation, which generates an AccessibilityEvent // and calls the onClick() listener on the view, if any. super.performClick(); // Handle the action for the custom click here. return true; } }
Önceki kalıp, özel tıklama etkinliğinin erişilebilirlikle uyumlu olmasını sağlamaya yardımcı olur
erişilebilirlik etkinliği oluşturmak için performClick()
yöntemini kullanarak
Erişilebilirlik hizmetlerinin, özel işlemi gerçekleştiren kullanıcı adına işlem yapması için bir giriş noktası sağlaması
tıklama etkinliği.