ধারণা ও Jetpack Compose-এর প্রয়োগ
অ্যাক্সেসিবিলিটি সংক্রান্ত প্রয়োজন আছে এমন ব্যবহারকারীদের সাহায্য করতে, Android ফ্রেমওয়ার্ক আপনাকে এমন একটি অ্যাক্সেসিবিলিটি পরিষেবা তৈরি করতে দেয় যা ব্যবহারকারীদের কাছে অ্যাপ থেকে কন্টেন্ট দেখাতে পারে এবং তাদের হয়ে অ্যাপও অপারেট করতে পারে।
Android-এ বিভিন্ন সিস্টেম অ্যাক্সেসিবিলিটি পরিষেবা উপলভ্য, যার মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত:
- টকব্যাক: ক্ষীণ দৃষ্টিসম্পন্ন বা দৃষ্টিশক্তিহীন ব্যক্তিদের সাহায্য করে। এটি সিন্থেসাইজড ভয়েসের মাধ্যমে কন্টেন্ট ঘোষণা করে এবং ব্যবহারকারীর জেসচারের উত্তরে অ্যাপে অ্যাকশন পারফর্ম করে।
- Switch Access: যাদের চলনে অক্ষমতা আছে তাদের সাহায্য করে। এটি ইন্টার্যাক্টিভ এলিমেন্ট হাইলাইট করে এবং ব্যবহারকারী কোনও বোতাম প্রেস করলে তার উত্তরে অ্যাকশন পারফর্ম করে। এটি শুধুমাত্র এক বা দুটি বোতাম ব্যবহার করে ডিভাইস কন্ট্রোল করার অনুমতি দেয়।
অ্যাক্সেসিবিলিটি সংক্রান্ত প্রয়োজনীয়তা আছে এমন ব্যক্তিদের আপনার অ্যাপ সফলভাবে ব্যবহার করতে সাহায্য করার জন্য, আপনার অ্যাপকে অবশ্যই এই পৃষ্ঠায় বর্ণনা করা পেশাদার পদ্ধতি অনুসরণ করতে হবে, যা অ্যাপ আরও অ্যাক্সেসযোগ্য করে তুলুন-এ বর্ণনা করা নির্দেশিকার উপর ভিত্তি করে তৈরি করা হয়েছে।
লেবেল এলিমেন্ট
আপনার অ্যাপের প্রতিটি ইন্টার্যাক্টিভ 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
অবজেক্ট—যাতে প্রতিটি চাইল্ড এলিমেন্ট স্বতন্ত্রভাবে শনাক্ত করা যায়।
এটি করতে, আপনার অ্যাডাপ্টার প্রয়োগের অংশ হিসেবে কন্টেন্টের বিবরণ সেট করুন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
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" } }
জাভা
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-এ সেট করে অ্যাক্সেসিবিলিটি পরিষেবার জন্য এর উদ্দেশ্য
নির্দেশ করতে পারেন।
অ্যাক্সেসিবিলিটি পরিষেবার ব্যবহারকারীরা প্যারাগ্রাফ বা শব্দের পরিবর্তে শিরোনামের মধ্যে নেভিগেট করার বিকল্প বেছে নিতে পারেন। এই নমনীয়তা টেক্সট নেভিগেশনের অভিজ্ঞতাকে উন্নত করে।
অ্যাক্সেসিবিলিটি প্যানেলের টাইটেল
Android 9 (API লেভেল ২৮) এবং তার পরবর্তী ভার্সনে, আপনি স্ক্রিনের পেন-এর জন্য অ্যাক্সেসিবিলিটি-ফ্রেন্ডলি শীর্ষক প্রদান করতে পারবেন। অ্যাক্সেসিবিলিটির উদ্দেশ্যে, একটি প্যানে হল একটি উইন্ডোর দৃশ্যত স্বতন্ত্র অংশ, যেমন একটি ফ্র্যাগমেন্টের কন্টেন্ট। অ্যাক্সেসিবিলিটি পরিষেবার জন্য প্যানেলের উইন্ডোর মতো আচরণ বুঝতে, আপনার অ্যাপের প্যানেলে বর্ণনামূলক শিরোনাম দিন। প্যানেলের চেহারা বা কন্টেন্ট পরিবর্তন হলে, অ্যাক্সেসিবিলিটি পরিষেবা ব্যবহারকারীদের আরও বিস্তারিত তথ্য প্রদান করতে পারে।
পেনের শীর্ষক নির্দিষ্ট করতে, 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"-এ সেট করুন।
অ্যাক্সেসিবিলিটি অ্যাকশন যোগ করুন
অ্যাক্সেসিবিলিটি পরিষেবা ব্যবহারকারীদের আপনার অ্যাপের মধ্যে সব ইউজার ফ্লো সহজে সম্পূর্ণ করার অনুমতি দেওয়া গুরুত্বপূর্ণ। যেমন, কোনও ব্যবহারকারী তালিকার কোনও আইটেমে সোয়াইপ করতে পারলে, এই অ্যাকশন অ্যাক্সেসিবিলিটি পরিষেবার ক্ষেত্রেও দেখানো যেতে পারে যাতে ব্যবহারকারীদের কাছে একই ইউজার ফ্লো সম্পূর্ণ করার বিকল্প উপায় থাকে।
সব অ্যাকশন অ্যাক্সেসযোগ্য করুন
টকব্যাক, 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 }
জাভা
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 ক্লাস থেকে এক্সটেন্ড করলে সবচেয়ে ভালো হয়। এইভাবে, 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 } }
জাভা
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; } }
অতিরিক্ত রিসোর্স
আপনার অ্যাপকে আরও অ্যাক্সেসযোগ্য করে তোলার ব্যাপারে আরও জানতে, নিম্নলিখিত অতিরিক্ত রিসোর্স দেখুন: