Bu uyarı, Android, uygulamanızı kullanabilecek kör veya görme engelli kişiler hakkında düşünmenizi hatırlatmak istediğinden ortaya çıkar. Bunun neye benzediğine dair hızlı bir genel bakış için bu videoyu izlemenizi öneririm .
Standart kullanıcı arayüzü görünümlerinin (gibi Button
, TextView
vb.) Tümü, Erişilebilirlik hizmetleri aracılığıyla görme engelli kullanıcılara uygun geri bildirim sağlamak için ayarlanmıştır. Dokunma olaylarını kendiniz halletmeye çalıştığınızda, bu geribildirimi sağlamayı unutmanız tehlikesiyle karşı karşıya kalırsınız. Uyarı bunun için.
1. Seçenek: Özel bir görünüm oluşturun
Dokunma olaylarını işleme, normalde özel bir görünümde yapılan bir şeydir. Bu seçeneği çok çabuk reddetmeyin. Gerçekten o kadar zor değil. TextView
Dokunma olaylarını işlemek için geçersiz kılınan tam bir örnek :
public class CustomTextView extends AppCompatTextView {
public CustomTextView(Context context) {
super(context);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_UP:
performClick();
return true;
}
return false;
}
// Because we call this from onTouchEvent, this code will be executed for both
// normal touch events and for when the system calls this using Accessibility
@Override
public boolean performClick() {
super.performClick();
doSomething();
return true;
}
private void doSomething() {
Toast.makeText(getContext(), "did something", Toast.LENGTH_SHORT).show();
}
}
O zaman bunu şöyle kullanırdın:
<com.example.myapp.CustomTextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:text="Click me to do something"/>
Özel bir görünüm oluşturma hakkında daha fazla ayrıntı için diğer cevabıma bakın .
Seçenek 2: Uyarıyı susturma
Diğer zamanlarda uyarıyı susturmak daha iyi olabilir. Örneğin, Button
dokunma olaylarına ihtiyacınız olan bir şeyle ne yapmak istediğinizden emin değilim . Özel bir düğme yaparsanız ve yukarıda özel için yaptığım gibi çağrılırsanız performClick()
, zaten aradığı için her seferinde iki kez çağrılırdı .onTouchEvent
TextView
Button
performClick()
Uyarıyı susturmak isteyebileceğiniz birkaç neden:
- Dokunma etkinliğinizle gerçekleştirdiğiniz iş yalnızca görseldir. Uygulamanızın gerçek çalışmasını etkilemez.
- Soğuk kalplisiniz ve dünyayı kör insanlar için daha iyi bir yer haline getirmeyi umursamıyorsunuz.
- Yukarıdaki 1. Seçenek'te size verdiğim kodu kopyalayıp yapıştırmak için çok tembelsiniz.
Uyarıyı bastırmak için yöntemin başına aşağıdaki satırı ekleyin:
@SuppressLint("ClickableViewAccessibility")
Örneğin:
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button myButton = findViewById(R.id.my_button);
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
}
ImageView
, setOnTouchListener'ı çağırdı, ancak performClick'i geçersiz kılmıyor onTouchEvent'i geçersiz kılan veya bir OnTouchListener kullanan bir Görünüm, performClick'i de uygulamaz ve tıklamalar algılandığında onu çağırmazsa, Görünüm erişilebilirlik eylemlerini düzgün şekilde işleyemeyebilir. Bazı erişilebilirlik hizmetleri performClick'i çağırdığından tıklama eylemlerini işleyen mantık ideal olarak View # performClick'e yerleştirilmelidir.Bir tıklama eyleminin gerçekleşmesi gerektiğinde.