نسخه چاپی

دسترس‌پذیربودن اپلیکیشن هم مثل داشتن رابط کاربری خوب و تجربه‌کاربری مناسب از لازمه‌های یک اپلیکیشن خوب است. همه کاربران حق دارند به محتوای اپلیکیشن دسترسی داشته باشند، و توجه به کاربران دارای هر گونه معلولیت، نه از سر ترحم، بلکه وظیفه ماست تا دنیای بهتر و کامل‌تری برای همنوعان خود به تصویر بکشیم. در این مقاله قصد داریم به اختصار به نکاتی اشاره کنیم که در اپلیکیشن‌های اندرویدی باعث افزایش دسترس‌پذیری می‌شوند. فراموش نکنیم برای این‌که بهتر در این راستا قدم برداریم، ابتدا باید خود را جای افراد دارای معلولیت بگذاریم و با شرایط آنها اپلیکیشن خود را از قدم اول بررسی کنیم. این متن به طور مشخص به دسترس‌پذیری اپلیکیشن‌ها برای افراد نابینا و کم‌بینا می‌پردازد. 

استفاده از Content Description

مهم‌ترین نکته‌ای که باید در نظر بگیریم این است که افراد نابینا و کم‌بینا با استفاده از اپلیکیشن‌هایی مثل TalkBack با اپلیکیشن ها کار می‌کنند، و این اپلیکیشن با خواندن Content Description اِلمان‌های صفحه برای کاربران، به درک کاملی از صفحه‌ای که داخلش هستند می‌رسند، در نتیجه ضروری است که برای تمام اِلمان‌های داخل صفحاتی که کاربران با آنها تعامل دارند، مثل عکس‌ها، Content Description بنویسم. متنی که می‌نویسیم، باید توضیح مختصر و دقیقی از چیزی باشد که به تصویر کشیده شده است، به نحوی که کاربران با شنیدن آن متوجه کارکرد دقیق آن اِلمان بشوند، توجه داشته باشیم که Content Description را با توجه به زبان برنامه بنویسیم تا کاربرانی که به طور مثال با زبان انگلیسی کار می‌کنند، توضیحات را به زبان انگلیسی بشنوند.

المان‌های Editable

برای المان‌هایی که توسط کاربران قابل تغییرند، مثلا EditText‌ ها، بسیار کمک کننده است اگر مثالی از یک ورودی معتبر به کاربران دهیم- برای مثال در EditText ها از hint استفاده کنیم.-

المان‌هایی که یکدیگر را توصیف می‌کنند


در بسیاری از شرایط ممکن است که دو المان در صفحه یکدیگر را توصیف کنند، به طور مثال یک TextView و یک ImageView، در این شرایط بسیار مفید است اگر از اتریبیوت android:labelFor استفاده کنیم و مشخص کنیم که TextView یک المان در صفحه است که توضیحاتی در مورد تصویر می‌دهد:

<TextView
   android:id="@+id/textHomeDescription"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:labelFor="@id/imageHome"/>
<ImageView
   android:id="@+id/imageHome"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"/> 


المانهایی که اطلاعاتی ندارند

اگه داخل صفحه از کامپوننت هایی استفاده کرده‌ایم  که فقط جنبه تزیینی دارند و اطلاعاتی داخل خود ندارند (مثلا فقط نقش spacer رو دارند) اتریبیوت android:importantForAccessibility را برابر no قرار بدهیم .

سرفصل‌ها

در صورتی که در اپلیکیشن خود برای بخش‌های مختلف از سرفصل استفاده می‌کنیم ، برای سرفصل‌ها اتریبیوت android:accessibilityHeading را برابر true قرار بدهیم . در این حالت به کاربرانمان این امکان را می‌دهیم که بین سرفصل‌ها جابجا شوند و تمام محتوای آن بخش‌ها برایشان خوانده نشود. 

لیست‌ها

وقتی از لیست‌ها استفاده می‌کنیم باید در نظر داشته باشیم که هر آیتم در لیست، یک آیتم منحصر به فرد است و توضیحاتش با دیگر آیتم‌های داخل لیست تفاوت دارد. در نتیجه باید برای هر المان در ViewHolder ها، ContentDescription منحصر به فردی را در نظر بگیریم تا بتواند توضیح دقیقی از آن آیتم لیست را در خود داشته باشد:

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

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

محتواهای مرتبط به هم

در صورتی که در صفحه‌ای، تعداد اطلاعات مرتبط به هم را نمایش می‌دهیم (مثلا اطلاعات یک کتاب که شامل Title و Description و تصویر آن کتاب است)، لازم است که این المان ها را داخل یک Container قرار دهیم که از ViewGroup ارث‌بری کرده است و برای Container اتریبیوت Android:ScreenReaderFocusable را برابر با False قرار دهیم، و برای المان‌های داخلی اتریبیوت Android:Focusable را برابر False قرار دهیم. در این حالت سرویس دسترس‌پذیری، تمام اطلاعات داخل Container را که در این مثال شامل Title و Description و توضیحات تصویر می‌شود، در یک نوبت در قالب صوت برای کاربر می‌خواند.

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

<ImageView
   android:id="@+id/book_image"
   android:contentDescription="@string/bookImageDescription"
   android:focusable="false" />

<TextView
   android:id="@+id/bookTitle"
   android:focusable="false"
   android:text="@string/bookTitle" />

<TextView
   android:id="@+id/bookDescription"
   android:focusable="false"
   android:text="@string/bookDescription" />

<ConstraintLayout />

آیا اطلاعات در رنگ‌ها کافی است؟

باید توجه داشته باشیم که تعدادی از کاربران اپلیکیشنی که در حال توسعه آن هستیم ممکن است در تشخیص رنگ‌ها مشکل داشته باشند و قرار دادن اطلاعات در رنگ‌ها مشکلات جدی‌ای برای این دسته از کاربران به وجود می‌آورد. بنابرین بهتر است در کنار رنگ‌ها از دیتا‌های بیشتر، شامل متن و آیکون‌ها، استفاده کنیم تا دسترس‌پذیری بیشتری برای این دسته از کاربران‌مان فراهم کنیم. 

آموزش گوگل برای دسترس‌پذیری هم حاوی اطلاعات سودمندی است که در اینجا می‌توانید مطالعه کنید. 

پشتیبانی توسعه‌دهندگان بازار آماده پاسخ‌گویی به هر گونه سؤال در این باره خواهد بود.  

به مطالب ارائه شده چه امتیازی می‌دهید؟
محل نوشتن دیدگاه ...

اگر در مورد محتوا نظر یا پیشنهادی دارید لطفا برای ما بنویسید.

زمان انتشار: ۱۴۰۲-۰۳-۱۶ ۰۷:۵۱

آخرین به‌روزرسانی: ۱۴۰۲-۰۳-۱۶ ۰۷:۵۱