অ্যাপ অ্যাক্সেসযোগ্যতা উন্নত করার নীতিগুলি

ব্যবহারকারীদের অ্যাক্সেসিবিলিটি প্রয়োজনে সহায়তা করার জন্য, অ্যান্ড্রয়েড ফ্রেমওয়ার্ক আপনাকে একটি অ্যাক্সেসিবিলিটি পরিষেবা তৈরি করতে দেয় যা অ্যাপ থেকে ব্যবহারকারীদের কাছে সামগ্রী উপস্থাপন করতে পারে এবং তাদের পক্ষে অ্যাপগুলি পরিচালনা করতে পারে।

Android নিম্নলিখিতগুলি সহ বেশ কয়েকটি সিস্টেম অ্যাক্সেসিবিলিটি পরিষেবা সরবরাহ করে:

  • টকব্যাক : যাদের দৃষ্টি কম বা অন্ধ তাদের সাহায্য করে। এটি একটি সংশ্লেষিত ভয়েসের মাধ্যমে বিষয়বস্তু ঘোষণা করে এবং ব্যবহারকারীর অঙ্গভঙ্গির প্রতিক্রিয়া হিসাবে একটি অ্যাপে ক্রিয়া সম্পাদন করে।
  • সুইচ অ্যাক্সেস : মোটর অক্ষমতা আছে এমন লোকেদের সাহায্য করে। এটি ইন্টারেক্টিভ উপাদানগুলিকে হাইলাইট করে এবং ব্যবহারকারীর একটি বোতাম টিপে প্রতিক্রিয়া হিসাবে ক্রিয়া সম্পাদন করে। এটি শুধুমাত্র এক বা দুটি বোতাম ব্যবহার করে ডিভাইস নিয়ন্ত্রণ করার অনুমতি দেয়।

অ্যাক্সেসযোগ্যতার প্রয়োজন আছে এমন লোকেদের আপনার অ্যাপটি সফলভাবে ব্যবহার করতে সাহায্য করার জন্য, আপনার অ্যাপটিকে অবশ্যই এই পৃষ্ঠায় বর্ণিত সেরা অনুশীলনগুলি অনুসরণ করতে হবে, যা অ্যাপগুলিকে আরও অ্যাক্সেসযোগ্য করুন -এ বর্ণিত নির্দেশিকাগুলির উপর ভিত্তি করে তৈরি করে৷

নিম্নলিখিত বিভাগগুলিতে বর্ণিত এই সেরা অনুশীলনগুলির প্রতিটি, আপনার অ্যাপের অ্যাক্সেসযোগ্যতা আরও উন্নত করতে পারে:

লেবেল উপাদান
ব্যবহারকারীদের অবশ্যই আপনার অ্যাপের মধ্যে প্রতিটি ইন্টারেক্টিভ এবং অর্থপূর্ণ UI উপাদানের বিষয়বস্তু এবং উদ্দেশ্য বুঝতে সক্ষম হতে হবে।
অ্যাক্সেসিবিলিটি অ্যাকশন যোগ করুন
অ্যাক্সেসিবিলিটি অ্যাকশন যোগ করে, আপনি অ্যাক্সেসিবিলিটি পরিষেবার ব্যবহারকারীদের আপনার অ্যাপের মধ্যে গুরুত্বপূর্ণ ব্যবহারকারীর প্রবাহ সম্পূর্ণ করতে সক্ষম করতে পারেন।
সিস্টেম উইজেটগুলি প্রসারিত করুন
আপনার নিজস্ব কাস্টম ভিউ তৈরি করার পরিবর্তে ফ্রেমওয়ার্কের অন্তর্ভুক্ত ভিউ উপাদানগুলি তৈরি করুন। ফ্রেমওয়ার্কের ভিউ এবং উইজেট ক্লাসগুলি ইতিমধ্যেই আপনার অ্যাপের প্রয়োজনীয় বেশিরভাগ অ্যাক্সেসিবিলিটি ক্ষমতা প্রদান করে৷
রঙ ব্যতীত অন্যান্য ইঙ্গিত ব্যবহার করুন
ব্যবহারকারীদের অবশ্যই একটি UI-তে উপাদানগুলির বিভাগের মধ্যে স্পষ্টভাবে পার্থক্য করতে সক্ষম হতে হবে। এটি করার জন্য, এই পার্থক্যগুলি প্রকাশ করতে রঙ সহ নিদর্শন এবং অবস্থান ব্যবহার করুন।
মিডিয়া বিষয়বস্তু আরো অ্যাক্সেসযোগ্য করুন
আপনার অ্যাপের ভিডিও বা অডিও বিষয়বস্তুতে বর্ণনা যোগ করুন যাতে এই বিষয়বস্তু ব্যবহার করে এমন ব্যবহারকারীদের সম্পূর্ণ ভিজ্যুয়াল বা শ্রবণ সংকেতের উপর নির্ভর করতে হবে না।

লেবেল উপাদান

আপনার অ্যাপের প্রতিটি ইন্টারেক্টিভ UI উপাদানের জন্য ব্যবহারকারীদের দরকারী এবং বর্ণনামূলক লেবেল প্রদান করা গুরুত্বপূর্ণ। প্রতিটি লেবেল অবশ্যই একটি নির্দিষ্ট উপাদানের অর্থ এবং উদ্দেশ্য ব্যাখ্যা করবে। টকব্যাকের মতো স্ক্রিন রিডার ব্যবহারকারীদের কাছে এই লেবেলগুলি ঘোষণা করতে পারে৷

বেশিরভাগ ক্ষেত্রে, আপনি লেআউট রিসোর্স ফাইলে একটি UI উপাদানের বিবরণ উল্লেখ করেন যাতে উপাদানটি থাকে। সাধারণত, আপনি 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 এলিমেন্টে কী লিখতে হবে। আপনি View অবজেক্টের android:labelFor অ্যাট্রিবিউট সেট করে এই সম্পর্কটি নির্দেশ করতে পারেন।

এই ধরনের উপাদান জোড়া লেবেল করার একটি উদাহরণ নিম্নলিখিত স্নিপেটে প্রদর্শিত হয়:


<!-- Label text for en-US locale would be "Username:" -->
<TextView
   android:id="@+id/usernameLabel" ...
   android:text="@string/username"
   android:labelFor="@+id/usernameEntry" />

<EditText
   android:id="@+id/usernameEntry" ... />

<!-- Label text for en-US locale would be "Password:" -->
<TextView
   android:id="@+id/passwordLabel" ...
   android:text="@string/password
   android:labelFor="@+id/passwordEntry" />

<EditText
   android:id="@+id/passwordEntry"
   android:inputType="textPassword" ... />

একটি সংগ্রহে উপাদান

একটি সংগ্রহের উপাদানগুলিতে লেবেল যোগ করার সময়, প্রতিটি লেবেল অনন্য হতে হবে। এইভাবে, একটি লেবেল ঘোষণা করার সময় সিস্টেমের অ্যাক্সেসিবিলিটি পরিষেবাগুলি ঠিক একটি অন-স্ক্রীন উপাদান উল্লেখ করতে পারে। এই চিঠিপত্র ব্যবহারকারীদের জানতে দেয় যখন তারা UI এর মাধ্যমে চক্রাকারে ঘুরতে থাকে বা কখন তারা ইতিমধ্যেই আবিষ্কৃত কোনো উপাদানে ফোকাস নিয়ে যায়।

বিশেষ করে, পুনঃব্যবহৃত লেআউটের মধ্যে উপাদানগুলিতে অতিরিক্ত পাঠ্য বা প্রাসঙ্গিক তথ্য অন্তর্ভুক্ত করুন—যেমন RecyclerView অবজেক্ট—যাতে প্রতিটি শিশু উপাদানকে স্বতন্ত্রভাবে চিহ্নিত করা যায়।

এটি করতে, আপনার অ্যাডাপ্টার বাস্তবায়নের অংশ হিসাবে বিষয়বস্তুর বিবরণ সেট করুন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:

কোটলিন

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"
    }
}

জাভা

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")
    }
}

সম্পর্কিত বিষয়বস্তুর গ্রুপ

যদি আপনার অ্যাপটি একটি প্রাকৃতিক গোষ্ঠী তৈরি করে এমন অনেকগুলি UI উপাদান প্রদর্শন করে, যেমন একটি গানের বিশদ বিবরণ বা একটি বার্তার বৈশিষ্ট্য, এই উপাদানগুলিকে একটি পাত্রের মধ্যে সাজান, যা সাধারণত 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 এ সেট করে অ্যাক্সেসিবিলিটি পরিষেবার জন্য এর উদ্দেশ্য নির্দেশ করতে পারেন।

অ্যাক্সেসিবিলিটি পরিষেবাগুলির ব্যবহারকারীরা অনুচ্ছেদের মধ্যে বা শব্দগুলির মধ্যে পরিবর্তে শিরোনামগুলির মধ্যে নেভিগেট করতে বেছে নিতে পারেন৷ এই নমনীয়তা পাঠ্য নেভিগেশন অভিজ্ঞতা উন্নত করে।

অ্যাক্সেসিবিলিটি প্যানের শিরোনাম

অ্যান্ড্রয়েড 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" ... />

আলংকারিক উপাদান

যদি আপনার UI-তে একটি উপাদান শুধুমাত্র ভিজ্যুয়াল স্পেসিং বা ভিজ্যুয়াল উপস্থিতির উদ্দেশ্যে বিদ্যমান থাকে, তাহলে এর android:importantForAccessibility অ্যাট্রিবিউটটি "no" তে সেট করুন।

অ্যাক্সেসিবিলিটি অ্যাকশন যোগ করুন

অ্যাক্সেসিবিলিটি পরিষেবার ব্যবহারকারীদের সহজেই আপনার অ্যাপের মধ্যে সমস্ত ব্যবহারকারী প্রবাহ সম্পাদন করার অনুমতি দেওয়া গুরুত্বপূর্ণ। উদাহরণস্বরূপ, যদি একজন ব্যবহারকারী একটি তালিকার একটি আইটেমে সোয়াইপ করতে পারেন, তবে এই ক্রিয়াটি অ্যাক্সেসিবিলিটি পরিষেবার কাছেও প্রকাশ করা যেতে পারে যাতে ব্যবহারকারীদের কাছে একই ব্যবহারকারী প্রবাহ সম্পূর্ণ করার বিকল্প উপায় থাকে।

সমস্ত কর্ম অ্যাক্সেসযোগ্য করুন

টকব্যাক, ভয়েস অ্যাক্সেস বা সুইচ অ্যাক্সেসের ব্যবহারকারীর অ্যাপের মধ্যে নির্দিষ্ট ব্যবহারকারীর প্রবাহ সম্পূর্ণ করার জন্য বিকল্প উপায়ের প্রয়োজন হতে পারে। ড্র্যাগ-এন্ড-ড্রপ বা সোয়াইপের মতো অঙ্গভঙ্গিগুলির সাথে সম্পর্কিত ক্রিয়াগুলির জন্য, আপনার অ্যাপটি এমনভাবে ক্রিয়াগুলিকে প্রকাশ করতে পারে যা অ্যাক্সেসিবিলিটি পরিষেবাগুলির ব্যবহারকারীদের কাছে অ্যাক্সেসযোগ্য৷

অ্যাক্সেসিবিলিটি অ্যাকশন ব্যবহার করে, অ্যাপ ব্যবহারকারীদের একটি অ্যাকশন সম্পূর্ণ করার বিকল্প উপায় প্রদান করতে পারে।

উদাহরণস্বরূপ, যদি আপনার অ্যাপ ব্যবহারকারীদের একটি আইটেমে সোয়াইপ করার অনুমতি দেয়, তাহলে আপনি একটি কাস্টম অ্যাক্সেসিবিলিটি অ্যাকশনের মাধ্যমে কার্যকারিতা প্রকাশ করতে পারেন, যেমন:

কোটলিন

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
}

জাভা

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 action’s 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
)

জাভা

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 ক্লাস থেকে সরাসরি প্রসারিত করা সেরা। এইভাবে, অ্যান্ড্রয়েড অ্যাক্সেসিবিলিটি ফ্রেমওয়ার্ক TriSwitch ক্লাসের প্রয়োজনীয় বেশিরভাগ অ্যাক্সেসিবিলিটি ক্ষমতা প্রদান করে:

  • অ্যাক্সেসিবিলিটি অ্যাকশন: একটি TriSwitch অবজেক্টে সম্পাদিত প্রতিটি সম্ভাব্য ব্যবহারকারীর ইনপুট কীভাবে অ্যাক্সেসিবিলিটি পরিষেবাগুলি অনুকরণ করতে পারে সে সম্পর্কে সিস্টেমের তথ্য। ( View থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।)
  • অ্যাক্সেসিবিলিটি ইভেন্ট: স্ক্রীন রিফ্রেশ বা আপডেট করার সময় TriSwitch অবজেক্টের চেহারা পরিবর্তন করতে পারে এমন প্রতিটি সম্ভাব্য উপায় সম্পর্কে অ্যাক্সেসিবিলিটি পরিষেবার তথ্য। ( View থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।)
  • বৈশিষ্ট্য: প্রতিটি TriSwitch অবজেক্টের বিশদ বিবরণ, যেমন এটি প্রদর্শন করে এমন যেকোনো পাঠ্যের বিষয়বস্তু। ( TextView থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।)
  • রাজ্যের তথ্য: একটি TriSwitch অবজেক্টের বর্তমান অবস্থার বর্ণনা, যেমন "চেক করা" বা "আনচেক করা"। ( CompoundButton থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।)
  • রাজ্যের পাঠ্য বিবরণ: প্রতিটি রাষ্ট্র কী প্রতিনিধিত্ব করে তার পাঠ্য-ভিত্তিক ব্যাখ্যা। ( Switch থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।)

Switch এবং এর সুপারক্লাসের এই আচরণটি প্রায় TriSwitch অবজেক্টের জন্য একই আচরণ। অতএব, আপনার বাস্তবায়ন সম্ভাব্য রাজ্যের সংখ্যা দুই থেকে তিনটি প্রসারিত করার উপর ফোকাস করতে পারে।

কাস্টম ঘটনা সংজ্ঞায়িত করুন

আপনি যখন একটি সিস্টেম উইজেট প্রসারিত করেন, আপনি সম্ভবত ব্যবহারকারীরা সেই উইজেটের সাথে কীভাবে ইন্টারঅ্যাক্ট করেন তার একটি দিক পরিবর্তন করেন। এই ইন্টারঅ্যাকশন পরিবর্তনগুলিকে সংজ্ঞায়িত করা গুরুত্বপূর্ণ যাতে অ্যাক্সেসিবিলিটি পরিষেবাগুলি আপনার অ্যাপের উইজেট আপডেট করতে পারে যেন ব্যবহারকারী সরাসরি উইজেটের সাথে ইন্টারঅ্যাক্ট করে৷

একটি সাধারণ নির্দেশিকা হল যে প্রতিটি ভিউ-ভিত্তিক কলব্যাকের জন্য আপনি ওভাররাইড করেন, আপনাকে ViewCompat.replaceAccessibilityAction() ওভাররাইড করে সংশ্লিষ্ট অ্যাক্সেসিবিলিটি অ্যাকশনটিকে পুনরায় সংজ্ঞায়িত করতে হবে। আপনার অ্যাপের পরীক্ষায়, আপনি ViewCompat.performAccessibilityAction() এ কল করে এই পুনঃসংজ্ঞায়িত ক্রিয়াগুলির আচরণ যাচাই করতে পারেন।

কিভাবে এই নীতি TriSwitch বস্তুর জন্য কাজ করতে পারে

একটি সাধারণ Switch অবজেক্টের বিপরীতে, তিনটি সম্ভাব্য অবস্থার মধ্য দিয়ে একটি TriSwitch অবজেক্ট সাইকেল ট্যাপ করে। তাই, সংশ্লিষ্ট ACTION_CLICK অ্যাক্সেসিবিলিটি অ্যাকশন আপডেট করা দরকার:

কোটলিন

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
    }
}

জাভা

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;
    }
}

রঙ ব্যতীত অন্যান্য ইঙ্গিত ব্যবহার করুন

রঙের দৃষ্টিশক্তির ঘাটতিতে ব্যবহারকারীদের সহায়তা করতে, আপনার অ্যাপের স্ক্রিনের মধ্যে UI উপাদানগুলিকে আলাদা করতে রঙ ব্যতীত অন্যান্য ইঙ্গিতগুলি ব্যবহার করুন৷ এই কৌশলগুলির মধ্যে বিভিন্ন আকার বা আকার ব্যবহার করা, পাঠ্য বা ভিজ্যুয়াল প্যাটার্ন প্রদান করা, বা উপাদানগুলির পার্থক্য চিহ্নিত করতে অডিও- বা স্পর্শ-ভিত্তিক (হ্যাপটিক) প্রতিক্রিয়া যোগ করা অন্তর্ভুক্ত থাকতে পারে।

চিত্র 1 একটি কার্যকলাপের দুটি সংস্করণ দেখায়। একটি সংস্করণ ওয়ার্কফ্লোতে দুটি সম্ভাব্য কর্মের মধ্যে পার্থক্য করতে শুধুমাত্র রঙ ব্যবহার করে। অন্য সংস্করণ দুটি বিকল্পের মধ্যে পার্থক্য হাইলাইট করার জন্য রঙ ছাড়াও আকার এবং পাঠ্য অন্তর্ভুক্ত করার সর্বোত্তম অনুশীলন ব্যবহার করে:

চিত্র 1. শুধুমাত্র রঙ ব্যবহার করে (বামে) এবং রঙ, আকার এবং পাঠ্য (ডানদিকে) ব্যবহার করে UI উপাদান তৈরি করার উদাহরণ।

মিডিয়া বিষয়বস্তু আরো অ্যাক্সেসযোগ্য করুন

আপনি যদি এমন একটি অ্যাপ তৈরি করেন যাতে মিডিয়া বিষয়বস্তু অন্তর্ভুক্ত থাকে, যেমন একটি ভিডিও ক্লিপ বা একটি অডিও রেকর্ডিং, তাহলে এই উপাদানটি বোঝার জন্য ব্যবহারকারীদের বিভিন্ন ধরনের অ্যাক্সেসিবিলিটি প্রয়োজনে সহায়তা করার চেষ্টা করুন। বিশেষ করে, আমরা আপনাকে নিম্নলিখিতগুলি করতে উত্সাহিত করি:

  • নিয়ন্ত্রণগুলি অন্তর্ভুক্ত করুন যা ব্যবহারকারীদের মিডিয়াকে বিরতি বা বন্ধ করতে, ভলিউম পরিবর্তন করতে এবং সাবটাইটেল (ক্যাপশন) টগল করতে দেয়৷
  • যদি একটি ভিডিও এমন তথ্য উপস্থাপন করে যা একটি ওয়ার্কফ্লো সম্পূর্ণ করার জন্য অত্যাবশ্যক, একই বিষয়বস্তু একটি বিকল্প বিন্যাসে প্রদান করুন, যেমন একটি প্রতিলিপি।

অতিরিক্ত সম্পদ

আপনার অ্যাপটিকে আরও অ্যাক্সেসযোগ্য করার বিষয়ে আরও জানতে, নিম্নলিখিত অতিরিক্ত সংস্থানগুলি দেখুন:

কোডল্যাব

ব্লগ এর লেখাগুলো