ऐप्लिकेशन की सुलभता के सिद्धांत

उपयोगकर्ताओं को सुलभता से जुड़ी ज़रूरतों को पूरा करने के लिए, Android फ़्रेमवर्क एक ऐसी सुलभता सेवा तैयार करना जो ऐप्लिकेशन का कॉन्टेंट लोगों को दिखा सके और उनकी ओर से ऐप्लिकेशन भी ऑपरेट कर सके.

Android, सिस्टम से जुड़ी कई सुलभता सेवाएं उपलब्ध कराता है. इनमें ये सेवाएं शामिल हैं:

  • TalkBack: दृष्टिहीन या कम दृष्टि वाले लोगों की मदद करता है. यह कॉन्टेंट के बारे में सूचना देने के लिए, मशीनी आवाज़ और ऐप्लिकेशन पर उपयोगकर्ता के जेस्चर के हिसाब से काम करता है.
  • बटन से ऐक्सेस करें: उन लोगों की मदद करता है जिन्हें चलने-फिरने और हिलने-डुलने में दिक्कत होती है. यह इंटरैक्टिव एलिमेंट को हाइलाइट करता है और उपयोगकर्ता के बटन दबाने के जवाब में कार्रवाइयां करता है. यह आपको सिर्फ़ एक या दो बटन से डिवाइस को कंट्रोल करने की सुविधा मिलती है.

सुलभता की ज़रूरतों वाले लोगों को आपका ऐप्लिकेशन इस्तेमाल करने में मदद करने के लिए, ऐप्लिकेशन को इस पेज पर बताए गए सबसे सही तरीकों का पालन करना होगा. ऐप्लिकेशन को बेहतर बनाने के लिए ऐक्सेस करने लायक हैं.

इन सबसे सही तरीकों के बारे में नीचे दिए गए सेक्शन में बताया गया है. आपके ऐप्लिकेशन की सुलभता को और बेहतर बना सकता है:

एलिमेंट को लेबल करना
उपयोगकर्ताओं को हर इंटरैक्टिव वीडियो के कॉन्टेंट और मकसद को समझना चाहिए और आसानी से समझ में आने वाला यूज़र इंटरफ़ेस (यूआई) एलिमेंट शामिल करें.
सुलभता से जुड़ी कार्रवाइयां जोड़ना
सुलभता कार्रवाइयां जोड़कर, आप सुलभता के उपयोगकर्ताओं को चालू कर सकते हैं सेवाएं ऐक्सेस करें.
सिस्टम विजेट का दायरा बढ़ाना
उस व्यू एलिमेंट पर बनाएं जो फ़्रेमवर्क में शामिल है. इसके बजाय, उस एलिमेंट का इस्तेमाल करें जिससे आपके कस्टम व्यू बन सकते हैं. फ़्रेमवर्क का व्यू और विजेट क्लास पहले से मौजूद हैं इस टूल की मदद से, अपने ऐप्लिकेशन की ज़्यादातर सुलभता सुविधाओं को उपलब्ध कराया जा सकता है.
रंग के अलावा दूसरे संकेतों का इस्तेमाल करना
उपयोगकर्ताओं को यह पता चलना चाहिए कि उनमें एलिमेंट की कैटगरी के बीच साफ़ तौर पर अंतर क्या है एक यूज़र इंटरफ़ेस (यूआई) है. ऐसा करने के लिए, इन संकेतों को दिखाने के लिए रंग के साथ पैटर्न और पोज़िशन का इस्तेमाल करें अंतर.
मीडिया कॉन्टेंट को ज़्यादा से ज़्यादा लोगों तक पहुंचाना
अपने ऐप्लिकेशन के वीडियो या ऑडियो कॉन्टेंट में जानकारी जोड़ें, ताकि उपयोगकर्ता जो लोग इस तरह का कॉन्टेंट देखते हैं उन्हें पूरी तरह से विज़ुअल या काल्पनिक संकेतों पर भरोसा नहीं करना चाहिए.

लेबल के एलिमेंट

उपयोगकर्ताओं को हर उस पेज के लिए उपयोगी और ज़्यादा जानकारी देने वाला लेबल देना ज़रूरी है आपके ऐप्लिकेशन का इंटरैक्टिव यूज़र इंटरफ़ेस (यूआई) एलिमेंट. हर लेबल में, का मकसद होता है. TalkBack जैसे स्क्रीन रीडर की मदद से, बोलकर निर्देश दिए जा सकते हैं उपयोगकर्ताओं को ये लेबल लगा सकते हैं.

ज़्यादातर मामलों में, आपके पास लेआउट में यूज़र इंटरफ़ेस (यूआई) एलिमेंट की जानकारी देने का विकल्प होता है वह संसाधन फ़ाइल जिसमें एलिमेंट मौजूद होता है. आम तौर पर, contentDescription विशेषता, जैसा कि ऐप्लिकेशन बनाने के लिए गाइड में बताया गया है ज़्यादा सुलभ. यह लीजिए लेबल करने की कई ऐसी तकनीकों के बारे में नीचे बताया गया है जिनके बारे में नीचे बताया गया है.

ऐसे एलिमेंट जिनमें बदलाव किया जा सकता है

बदलाव किए जा सकने वाले एलिमेंट को लेबल करते समय, जैसे कि EditText ऑब्जेक्ट, दिखाने से मदद मिलती है ऐसा टेक्स्ट जो एलिमेंट में मान्य इनपुट का उदाहरण देता है. इसके अलावा, इस उदाहरण टेक्स्ट को स्क्रीन रीडर के लिए उपलब्ध कराया जाएगा. इन स्थितियों में, आपको android:hint एट्रिब्यूट का इस्तेमाल कर सकते हैं, जैसा कि इस स्निपेट में दिखाया गया है:

<!-- The hint text for en-US locale would be
     "Apartment, suite, or building". -->
<EditText
   android:id="@+id/addressLine2"
   android:hint="@string/aptSuiteBuilding" ... />

ऐसे में, View ऑब्जेक्ट में android:labelFor एट्रिब्यूट होना चाहिए EditText एलिमेंट के आईडी पर सेट होना चाहिए. ज़्यादा जानकारी के लिए, यहां देखें सेक्शन में जाएं.

एलिमेंट के ऐसे पेयर जिनमें एक-दूसरे के बारे में बताया जाता है

EditText एलिमेंट में एलिमेंट का संबंधित होना आम बात है View ऑब्जेक्ट जो बताता है कि उपयोगकर्ताओं को क्या-क्या करना चाहिए EditText एलिमेंट में Enter दबाएं. इस संबंध की जानकारी देने के लिए, View ऑब्जेक्ट का android:labelFor एट्रिब्यूट.

ऐसे एलिमेंट पेयर को लेबल करने का एक उदाहरण नीचे दिए गए स्निपेट में दिखता है:

!<-- Label text for en-US locale would be "Username:" --
>T<extView
   android:id="@+id/usernameLabel" ...
   android:text="@string/username"
   android:labelFor="@+id/usernameEntry" /
>
E<ditText
   android:id="@+id/usernameEntry" ... /
>
!<-- Label text for en-US locale would be "Password:" --
>T<extView
   android:id="@+id/passwordLabel" ...
   android:text="@string/password
   android:labelFor="@+id/passwordEntry" /
>
E<ditText
   android:id="@+id/passwordEntry"
   android:inputType="textPassword" ... /
>

कलेक्शन में मौजूद एलिमेंट

कलेक्शन के एलिमेंट में लेबल जोड़ते समय, हर लेबल यूनीक होना चाहिए. इस तरह, सिस्टम की सुलभता सेवाएं स्क्रीन पर दिखने वाली सिर्फ़ एक जानकारी दे सकती हैं एलिमेंट का इस्तेमाल करें. इससे उपयोगकर्ताओं को पता चलता है कि यूज़र इंटरफ़ेस (यूआई) पर जाने या फ़ोकस को ऐसे एलिमेंट पर ले जाने पर, जो जिन्हें वे पहले ही पता लगा चुके थे.

खास तौर पर, अतिरिक्त टेक्स्ट या संदर्भ के हिसाब से जानकारी, फिर से इस्तेमाल किए गए लेआउट में एलिमेंट—जैसे कि RecyclerView ऑब्जेक्ट—ताकि हर चाइल्ड एलिमेंट की खास तौर पर पहचान की जा सके.

ऐसा करने के लिए, अडैप्टर को लागू करने के दौरान कॉन्टेंट की जानकारी को इस तरह से सेट करें: निम्न कोड स्निपेट में दिखाया गया है:

Kotlin

data class MovieRating(val title: String, val starRating: Integer)

class MyMovieRatingsAdapter(private val myData: Array<MovieRating>):
        RecyclerView.Adapter<MyMovieRatingsAdapter.MyRatingViewHolder>() {

    class MyRatingViewHolder(val ratingView: ImageView) :
            RecyclerView.ViewHolder(ratingView)

    override fun onBindViewHolder(holder: MyRatingViewHolder, position: Int) {
        val ratingData = myData[position]
        holder.ratingView.contentDescription = "Movie ${position}: " +
                "${ratingData.title}, ${ratingData.starRating} stars"
    }
}

Java

public class MovieRating {
    private String title;
    private int starRating;
    // ...
    public String getTitle() { return title; }
    public int getStarRating() { return starRating; }
}

public class MyMovieRatingsAdapter
        extends RecyclerView.Adapter<MyAdapter.MyRatingViewHolder> {
    private MovieRating[] myData;


    public static class MyRatingViewHolder extends RecyclerView.ViewHolder {
        public ImageView ratingView;
        public MyRatingViewHolder(ImageView iv) {
            super(iv);
            ratingView = iv;
        }
    }

    @Override
    public void onBindViewHolder(MyRatingViewHolder holder, int position) {
        MovieRating ratingData = myData[position];
        holder.ratingView.setContentDescription("Movie " + position + ": " +
                ratingData.getTitle() + ", " + ratingData.getStarRating() +
                " stars")
    }
}

मिलते-जुलते कॉन्टेंट के ग्रुप

अगर आपका ऐप्लिकेशन, नैचुरल ग्रुप बनाने वाले कई यूज़र इंटरफ़ेस (यूआई) एलिमेंट दिखाता है, जैसे गाने का ब्यौरा या मैसेज की विशेषताओं के आधार पर, इन एलिमेंट को कंटेनर, जो आम तौर पर ViewGroup की सब-क्लास होता है. कंटेनर सेट करना ऑब्जेक्ट का android:screenReaderFocusable एट्रिब्यूट true और हर अंदरूनी ऑब्जेक्ट को android:focusable एट्रिब्यूट को false को दिया गया था. इस तरह, सुलभता सेवाएं लोगों को एलिमेंट' एक के बाद एक निर्देश, एक एलान में कॉन्टेंट के ब्यौरे. मिलते-जुलते एलिमेंट को एक ही जगह पर रखने से सहायक टेक्नोलॉजी का इस्तेमाल करने वालों को मदद मिलती है स्क्रीन पर मौजूद जानकारी को बेहतर तरीके से खोजें.

नीचे दिए गए स्निपेट में ऐसा कॉन्टेंट शामिल है जो किसी एक स्निपेट से जुड़ा है इसलिए, कंटेनर एलिमेंट में, ConstraintLayout के इंस्टेंस में android:screenReaderFocusable एट्रिब्यूट को true और इनर पर सेट किया गया है TextView एलिमेंट में हर एलिमेंट का android:focusable एट्रिब्यूट इस पर सेट है false:

<!-- In response to a single user interaction, accessibility services announce
     both the title and the artist of the song. -->
<ConstraintLayout
    android:id="@+id/song_data_container" ...
    android:screenReaderFocusable="true">

    <TextView
        android:id="@+id/song_title" ...
        android:focusable="false"
        android:text="@string/my_song_title" />
    <TextView
        android:id="@+id/song_artist"
        android:focusable="false"
        android:text="@string/my_songwriter" />
</ConstraintLayout>

सुलभता सेवाएं, अंदरूनी एलिमेंट को बताती हैं ब्यौरे में नहीं है, तो यह ज़रूरी है कि आप हर विवरण को जितना हो सके उतना छोटा रखें साथ ही, वह एलिमेंट के बारे में भी बताता हो.

ध्यान दें: आम तौर पर, आपको यह करना चाहिए किसी ग्रुप के लिए कॉन्टेंट की जानकारी देने से बचें. इसके लिए, बच्चे. ऐसा करने से समूह का विवरण भंग हो जाता है और जब किसी चाइल्ड में परिवर्तन करते हैं, तो हो सकता है समूह का वर्णन अब दिखने वाले टेक्स्ट से मेल न खाए.

सूची या ग्रिड कॉन्टेक्स्ट में, स्क्रीन रीडर किसी सूची के टेक्स्ट को इकट्ठा कर सकता है या ग्रिड एलिमेंट के चाइल्ड टेक्स्ट नोड. इसे संशोधित करने से बचना बेहतर होगा सूचना.

नेस्ट किए गए ग्रुप

अगर आपके ऐप्लिकेशन का इंटरफ़ेस कई डाइमेंशन में जानकारी देता है, जैसे कि त्योहार वाले हर दिन के इवेंट की सूची के लिए, android:screenReaderFocusable का इस्तेमाल करें इनर ग्रुप कंटेनर पर एट्रिब्यूट की वैल्यू सबमिट करें. यह लेबलिंग स्कीम तो स्क्रीन की सूचनाएं पाने के लिए ज़रूरी सूचनाओं की संख्या के बीच संतुलन जानकारी और हर एलान की अवधि तय करें.

नीचे दिया गया कोड स्निपेट, इसके अंदर ग्रुप को लेबल करने का एक तरीका दिखाता है बड़े ग्रुप:

<!-- In response to a single user interaction, accessibility services
     announce the events for a single stage only. -->
<ConstraintLayout
    android:id="@+id/festival_event_table" ... >
    <ConstraintLayout
        android:id="@+id/stage_a_event_column"
        android:screenReaderFocusable="true">

        <!-- UI elements that describe the events on Stage A. -->

    </ConstraintLayout>
    <ConstraintLayout
        android:id="@+id/stage_b_event_column"
        android:screenReaderFocusable="true">

        <!-- UI elements that describe the events on Stage B. -->

    </ConstraintLayout>
</ConstraintLayout>

टेक्स्ट में मौजूद हेडर

कुछ ऐप्लिकेशन, स्क्रीन पर दिखने वाले टेक्स्ट के ग्रुप की खास जानकारी देने के लिए, हेडिंग का इस्तेमाल करते हैं. अगर आपने कोई खास View एलिमेंट, हेडिंग के बारे में बताता है, तो उसका मकसद बताया जा सकता है का विकल्प चुनने के लिए android:accessibilityHeading एट्रिब्यूट true.

सुलभता सेवाओं के उपयोगकर्ता एक से दूसरे टाइटल पर जाने का विकल्प चुन सकते हैं शब्दों के बीच या पैराग्राफ़ के बीच में नहीं लिखें. इस वजह से, टेक्स्ट नेविगेशन का अनुभव पाएं.

सुलभता पैनल के टाइटल

Android 9 (एपीआई लेवल 28) और उसके बाद वाले वर्शन में, स्क्रीन के पैनल के लिए, सुलभता सुविधाओं के हिसाब से बनाए गए टाइटल. सुलभता के लिए के लिए देख रहे हैं, तो पैनल विज़ुअल तौर पर किसी विंडो का एक अलग हिस्सा होता है, जैसे कि फ़्रैगमेंट का कॉन्टेंट होता है. सुलभता सेवाओं के लिए, पैनल का विंडो जैसा व्यवहार करने के लिए, अपने ऐप्लिकेशन के पैनल. इसके बाद, सुलभता सेवाएं इन कामों के लिए ज़्यादा जानकारी उपलब्ध करा सकती हैं: पैनल के दिखने या उसके कॉन्टेंट में बदलाव होने पर उपयोगकर्ताओं की संख्या.

पैनल का शीर्षक बताने के लिए, android:accessibilityPaneTitle एट्रिब्यूट:

<!-- Accessibility services receive announcements about content changes
     that are scoped to either the "shopping cart view" section (top) or
     "browse items" section (bottom) -->
<MyShoppingCartView
     android:id="@+id/shoppingCartContainer"
     android:accessibilityPaneTitle="@string/shoppingCart" ... />

<MyShoppingBrowseView
     android:id="@+id/browseItemsContainer"
     android:accessibilityPaneTitle="@string/browseProducts" ... />

सजावटी एलिमेंट

अगर आपके यूज़र इंटरफ़ेस (यूआई) में कोई एलिमेंट सिर्फ़ विज़ुअल स्पेसिंग या दिखने के तरीके के लिए मौजूद है, तो के मकसद से, android:importantForAccessibility एट्रिब्यूट की वैल्यू "no" को दें.

सुलभता से जुड़ी कार्रवाइयां जोड़ें

सुलभता सेवाओं के उपयोगकर्ताओं को आसानी से सभी काम करने की अनुमति देना ज़रूरी है आपके ऐप्लिकेशन में यूज़र फ़्लो के मामले में भी ऐसा ही होता है. उदाहरण के लिए, अगर कोई उपयोगकर्ता नहीं है, तो यह कार्रवाई सुलभता सेवाओं के संपर्क में आ सकती है. इससे उपयोगकर्ताओं के पास उसी यूज़र फ़्लो को पूरा करने का दूसरा तरीका है.

सभी कार्रवाइयों को ऐक्सेस करने की सुविधा दें

TalkBack, Voice Access का उपयोगकर्ता, इसके अलावा, ऐक्सेस करने का तरीका बदलने की सुविधा को ऐप खोलें. खींचकर छोड़ने या स्वाइप करने जैसे हाथ के जेस्चर से जुड़ी कार्रवाइयों के लिए, आपका ऐप्लिकेशन कार्रवाइयों को इस तरह दिखा सकता है कि इसके उपयोगकर्ता उसे ऐक्सेस कर सकें सुलभता सेवाएं.

सुलभता कार्रवाइयों का इस्तेमाल करके, ऐप्लिकेशन, उपयोगकर्ताओं को किसी कार्रवाई को पूरा करने के दूसरे तरीके उपलब्ध करा सकता हो.

उदाहरण के लिए, अगर आपके ऐप्लिकेशन में उपयोगकर्ताओं को किसी आइटम पर स्वाइप करने की सुविधा मिलती है, तो किसी कस्टम सुलभता कार्रवाई से सुविधा को सार्वजनिक करें, जैसे:

Kotlin

ViewCompat.addAccessibilityAction(
    // View to add accessibility action
    itemView,
    // Label surfaced to user by an accessibility service
    getText(R.id.archive)
) { _, _ ->
    // Same method executed when swiping on itemView
    archiveItem()
    true
}

Java

ViewCompat.addAccessibilityAction(
    // View to add accessibility action
    itemView,
    // Label surfaced to user by an accessibility service
    getText(R.id.archive),
    (view, arguments) -> {
        // Same method executed when swiping on itemView
        archiveItem();
        return true;
    }
);

With the custom accessibility action implemented, users can access the action through the actions menu.

Make available actions understandable

When a view supports actions such as touch & hold, an accessibility service such as TalkBack announces it as "Double tap and hold to long press."

This generic announcement doesn't give the user any context about what a touch & hold action does.

To make this announcement more descriptive, you can replace the accessibility actions announcement like so:

Kotlin

ViewCompat.replaceAccessibilityAction(
    // View that contains touch & hold action
    itemView,
    AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_LONG_CLICK,
    // Announcement read by TalkBack to surface this action
    getText(R.string.favorite),
    null
)

Java

ViewCompat.replaceAccessibilityAction(
    // View that contains touch & hold action
    itemView,
    AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_LONG_CLICK,
    // Announcement read by TalkBack to surface this action
    getText(R.string.favorite),
    null
);

This results in TalkBack announcing "Double tap and hold to favorite," helping users understand the purpose of the action.

Extend system widgets

Note: When you design your app's UI, use or extend system-provided widgets that are as far down Android's class hierarchy as possible. System-provided widgets that are far down the hierarchy already have most of the accessibility capabilities your app needs. It's easier to extend these system-provided widgets than to create your own from the more generic View, ViewCompat, Canvas, and CanvasCompat classes.

If you must extend View or Canvas directly, which might be necessary for a highly customized experience or a game level, see Make custom views more accessible.

This section uses the example of implementing a special type of Switch called TriSwitch while following best practices around extending system widgets. A TriSwitch object works similarly to a Switch object, except that each instance of TriSwitch allows the user to toggle among three possible states.

Extend from far down the class hierarchy

The Switch object inherits from several framework UI classes in its hierarchy:

View
 TextView
   Button
     CompoundButton
       Switch

नई TriSwitch क्लास के लिए, सीधे Switch से एक्सटेंडेट करना सबसे अच्छा रहता है क्लास. इस तरह, Android की सुलभता सुविधाएं फ़्रेमवर्क TriSwitch क्लास की ज़्यादातर सुलभता सुविधाएं उपलब्ध कराता है ज़रूरतें:

  • सुलभता कार्रवाइयां: सुलभता सुविधाओं के बारे में सिस्टम के लिए जानकारी ये सेवाएं, TriSwitch पर किए जाने वाले हर संभावित उपयोगकर्ता इनपुट को एम्युलेट कर सकती हैं ऑब्जेक्ट है. (View से इनहेरिट की गई.)
  • सुलभता इवेंट: सुलभता सेवाओं के लिए हर इवेंट की जानकारी इस तरह से है कि जब स्क्रीन पर TriSwitch ऑब्जेक्ट दिखे, तो वह अलग दिखे रीफ़्रेश या अपडेट करता है. (View से इनहेरिट की गई.)
  • खास विशेषताएं: हर TriSwitch ऑब्जेक्ट के बारे में जानकारी, जैसे कि को दिखने वाले किसी भी टेक्स्ट का कॉन्टेंट शामिल कर सकता है. (TextView से इनहेरिट की गई.)
  • स्थिति की जानकारी: TriSwitch ऑब्जेक्ट की मौजूदा स्थिति के बारे में जानकारी, जैसे कि "चुना गया" या "सही का निशान हटाया गया" हो. (CompoundButton से इनहेरिट की गई.)
  • राज्य के बारे में जानकारी: हर राज्य के बारे में टेक्स्ट के आधार पर जानकारी दर्शाता है. (Switch से इनहेरिट की गई.)

Switch और इसकी सुपरक्लास का यह व्यवहार करीब-करीब TriSwitch ऑब्जेक्ट के लिए एक जैसा व्यवहार. इसलिए, लागू करने पर हमारा फ़ोकस दो से तीन संभावित राज्यों की संख्या को बढ़ाने पर है.

कस्टम इवेंट तय करना

जब सिस्टम के विजेट को बढ़ाया जाता है, तो हो सकता है कि आप उपयोगकर्ताओं के काम करने का तरीका बदल दें उस विजेट के साथ इंटरैक्ट करें. इन इंटरैक्शन परिवर्तनों को परिभाषित करना ज़रूरी है ऐसा किया जा सकता है, ताकि सुलभता सेवाएं आपके ऐप्लिकेशन के विजेट को इस तरह अपडेट कर सकें जैसे कि विजेट के साथ सीधे इंटरैक्ट करता है.

एक सामान्य दिशा-निर्देश यह है कि हर व्यू-आधारित कॉलबैक के लिए, आपको ViewCompat.replaceAccessibilityAction(). अपने ऐप्लिकेशन की जांच में, फिर से तय की गई इन कार्रवाइयों के काम करने के तरीके की पुष्टि कॉल किया जा रहा है ViewCompat.performAccessibilityAction().

यह सिद्धांत, TriSwitch ऑब्जेक्ट के लिए कैसे काम करता है

किसी सामान्य Switch ऑब्जेक्ट पर टैप करने से, TriSwitch ऑब्जेक्ट पर एक साइकल चलता है तीन संभावित स्थितियों में शामिल हो सकते हैं. इसलिए, संबंधित ACTION_CLICK सुलभता कार्रवाई को अपडेट करने की ज़रूरत है:

Kotlin

class TriSwitch(context: Context) : Switch(context) {
    // 0, 1, or 2
    var currentState: Int = 0
        private set

    init {
        updateAccessibilityActions()
    }

    private fun updateAccessibilityActions() {
        ViewCompat.replaceAccessibilityAction(this, ACTION_CLICK,
            action-label) {
            view, args -> moveToNextState()
        })
    }

    private fun moveToNextState() {
        currentState = (currentState + 1) % 3
    }
}

Java

public class TriSwitch extends Switch {
    // 0, 1, or 2
    private int currentState;

    public int getCurrentState() {
        return currentState;
    }

    public TriSwitch() {
        updateAccessibilityActions();
    }

    private void updateAccessibilityActions() {
        ViewCompat.replaceAccessibilityAction(this, ACTION_CLICK,
            action-label, (view, args) -> moveToNextState());
    }

    private void moveToNextState() {
        currentState = (currentState + 1) % 3;
    }
}

रंग के अलावा दूसरे संकेतों का इस्तेमाल करें

कलर विज़न की कमियों से जूझ रहे उपयोगकर्ताओं की मदद करने के लिए, कलर के अलावा दूसरे संकेतों का इस्तेमाल करें, आपके ऐप्लिकेशन की स्क्रीन के यूज़र इंटरफ़ेस (यूआई) एलिमेंट के बीच फ़र्क़ कर सकता है. इन तकनीकों का इस्तेमाल करने पर इनमें अलग-अलग आकार या साइज़ का इस्तेमाल करके, टेक्स्ट या विज़ुअल पैटर्न शामिल करना शामिल है. एलिमेंट को मार्क करने के लिए, ऑडियो या टच-आधारित (हैप्टिक) फ़ीडबैक जोड़कर' अंतर.

पहली इमेज में किसी गतिविधि के दो वर्शन दिखाए गए हैं. एक वर्शन में, इसके लिए सिर्फ़ रंग का इस्तेमाल किया जाता है वर्कफ़्लो में दो संभावित कार्रवाइयों के बीच अंतर करता है. अन्य वर्शन रंग के अलावा आकार और टेक्स्ट को शामिल करने का सबसे सही तरीक़ा दो विकल्पों के बीच के अंतर को हाइलाइट करें:

पहली इमेज. सिर्फ़ रंग का इस्तेमाल करके यूज़र इंटरफ़ेस (यूआई) एलिमेंट बनाने के उदाहरण (बाएं) और रंग, आकारों और टेक्स्ट (दाएं) का इस्तेमाल करके.

मीडिया कॉन्टेंट को ज़्यादा सुलभ बनाएं

अगर कोई ऐसा ऐप्लिकेशन डेवलप किया जा रहा है जिसमें मीडिया कॉन्टेंट शामिल है, जैसे कि वीडियो क्लिप या ऑडियो रिकॉर्डिंग हो, तो उपयोगकर्ताओं की मदद करने के लिए के लिए सुलभता सुविधाओं की ज़रूरत होती है. खास तौर पर, हम आपको ये काम करने की सलाह दी जाती है:

  • ऐसे कंट्रोल शामिल करें जिनकी मदद से लोग, मीडिया को रोक या बंद कर सकते हैं. इसके अलावा, पर क्लिक करें और सबटाइटल (कैप्शन) टॉगल करें.
  • अगर कोई वीडियो ऐसी जानकारी देता है जो किसी वर्कफ़्लो को पूरा करने के लिए ज़रूरी है, एक ही कॉन्टेंट को दूसरे फ़ॉर्मैट में उपलब्ध कराएं, जैसे कि ट्रांसक्रिप्ट.

अन्य संसाधन

अपने ऐप्लिकेशन को ज़्यादा सुलभ बनाने के बारे में ज़्यादा जानने के लिए, यहां देखें अतिरिक्त संसाधन:

कोड लैब

ब्लॉग पोस्ट