यह चेतावनी इसलिए आती है क्योंकि एंड्रॉइड आपको अंधे या नेत्रहीन लोगों के बारे में सोचने के लिए याद दिलाना चाहता है जो आपके ऐप का उपयोग कर रहे होंगे। मेरा सुझाव है कि आप इस वीडियो को एक त्वरित अवलोकन के लिए देखें जो कि ऐसा है।
पहुँच योग्य सेवाओं के माध्यम से नेत्रहीन उपयोगकर्ताओं को उचित प्रतिक्रिया प्रदान करने के लिए मानक यूआई दृश्य (जैसे Button
, TextView
आदि) स्थापित किए जाते हैं। जब आप अपने आप को स्पर्श घटनाओं को संभालने की कोशिश करते हैं, तो आप उस प्रतिक्रिया को प्रदान करने के लिए भूल जाने के खतरे में हैं। यह चेतावनी के लिए है।
विकल्प 1: एक कस्टम दृश्य बनाएं
स्पर्श घटनाओं को संभालना आम तौर पर एक कस्टम दृश्य में किया जाता है। इस विकल्प को भी जल्दी से खारिज न करें। यह वास्तव में मुश्किल नहीं है। यहाँ एक पूर्ण उदाहरण है TextView
कि स्पर्श घटनाओं को संभालने के लिए ओवरराइड किया गया है:
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();
}
}
तब आप इसे इस तरह उपयोग करेंगे:
<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"/>
देखें मेरे दूसरे सवाल का जवाब एक कस्टम दृश्य बनाने के बारे में अधिक जानकारी के लिए।
विकल्प 2: चेतावनी को शांत करना
अन्य बार चेतावनी को चुप कराना बेहतर होगा। उदाहरण के लिए, मुझे यकीन नहीं है कि आप क्या करना चाहते हैं, इसके लिए Button
आपको स्पर्श घटनाओं की आवश्यकता है। आप एक कस्टम बटन बनाने के लिए थे और कहा जाता है तो performClick()
में onTouchEvent
जैसे मैं कस्टम के लिए ऊपर किया TextView
है, तो यह दो बार हर बार बुलाया जायेगा क्योंकि Button
पहले से ही कहता है performClick()
।
यहाँ कुछ कारण दिए गए हैं जिनसे आप चेतावनी को चुप करा सकते हैं:
- आप अपने स्पर्श कार्यक्रम के साथ जो कार्य कर रहे हैं वह केवल दृश्य है। यह आपके ऐप के वास्तविक कार्य को प्रभावित नहीं करता है।
- आप ठंडे दिल के हैं और दुनिया को अंधे लोगों के लिए एक बेहतर जगह बनाने की परवाह नहीं करते हैं।
- ऊपर दिए गए विकल्प 1 में आपके द्वारा दिए गए कोड को कॉपी और पेस्ट करने के लिए आप बहुत आलसी हैं।
चेतावनी को दबाने के लिए विधि की शुरुआत में निम्नलिखित पंक्ति जोड़ें:
@SuppressLint("ClickableViewAccessibility")
उदाहरण के लिए:
@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 इस पर कॉल किया गया है, लेकिन प्रदर्शन को ओवरराइड नहीं करता है। यदि कोई दृश्य जो onTouchEvent को ओवरराइड करता है या OnTouchListener का उपयोग करता है, तो भी प्रदर्शन को लागू नहीं करता है और क्लिक का पता चलने पर उसे कॉल करता है, दृश्य ठीक से पहुंच योग्य क्रियाओं को ठीक से नहीं देख सकता है। क्लिक क्रियाओं को संभालने वाले लॉजिक को आदर्श रूप से # प्रदर्शन में रखा जाना चाहिए क्योंकि क्लिक एक्शन होने पर कुछ एक्सेसिबिलिटी सेवाएं परफॉर्म करती हैं।