'Atribut contentDescription pada gambar tidak ada' dalam XML

222

Saya mendapat peringatan tentang [Aksesibilitas] Atribut contentDescription yang hilang pada gambar di gerhana. Peringatan ini ditampilkan di baris 5 (nyatakan ImageView) dalam kode XML di bawah ini.

Ini tidak membuat kesalahan ketika membangun dan menjalankan aplikasi saya. Tapi saya benar-benar ingin tahu mengapa saya mendapat peringatan ini.

Ini adalah file XML saya:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/contact_entry_image"
        android:src="@drawable/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/contact_entry_text"
        android:text=""
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        />

</LinearLayout>

Tolong bantu saya mengenai hal ini dan terima kasih atas bacaan Anda.

PhatHV
sumber
6
saran versi ADT baru menambahkan android:contentDescriptionatribut ini imageview, hanya saran, saya pikir Anda dapat mengabaikan ini, itu tidak membuat kesalahan kompilasi, juga Anda dapat memeriksahttp://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
idiottiger
ya itu benar
Rahul Kushwaha

Jawaban:

269

Ikuti tautan ini untuk solusi: Android Lint contentDescription warning

Atasi peringatan ini dengan menetapkan atribut android: contentDescription untuk ImageView saya

android: contentDescription = "@ string / desc"

Dukungan Android Lint di ADT 16 melempar peringatan ini untuk memastikan bahwa widget gambar menyediakan deskripsi konten

Ini mendefinisikan teks yang menjelaskan secara singkat konten tampilan. Properti ini digunakan terutama untuk aksesibilitas. Karena beberapa tampilan tidak memiliki representasi tekstual, atribut ini dapat digunakan untuk menyediakannya.

Widget non-tekstual seperti ImageViews dan ImageButtons harus menggunakan atribut contentDescription untuk menentukan deskripsi tekstual dari widget sehingga pembaca layar dan alat aksesibilitas lainnya dapat menggambarkan antarmuka pengguna secara memadai.

Tautan ini untuk penjelasan: Aksesibilitas, Dampak, dan Sumber Daya Pengembangan

Banyak pengguna Android memiliki cacat yang mengharuskan mereka berinteraksi dengan perangkat Android mereka dengan cara yang berbeda. Ini termasuk pengguna yang memiliki cacat visual, fisik, atau usia yang mencegah mereka melihat atau menggunakan layar sentuh sepenuhnya.

Android menyediakan fitur dan layanan aksesibilitas untuk membantu pengguna ini menavigasi perangkat mereka dengan lebih mudah, termasuk text-to-speech, umpan balik haptic, trackball, dan navigasi D-pad yang menambah pengalaman mereka. Pengembang aplikasi Android dapat memanfaatkan layanan ini untuk membuat aplikasi mereka lebih mudah diakses dan juga membangun layanan aksesibilitas mereka sendiri.

Panduan ini untuk membuat aplikasi Anda dapat diakses: Membuat Aplikasi Lebih Dapat Diakses

Memastikan aplikasi Anda dapat diakses oleh semua pengguna relatif mudah, terutama ketika Anda menggunakan komponen antarmuka pengguna yang disediakan kerangka kerja. Jika Anda hanya menggunakan komponen standar ini untuk aplikasi Anda, hanya ada beberapa langkah yang diperlukan untuk memastikan aplikasi Anda dapat diakses:

  1. Beri label ImageButton , ImageView , EditText , CheckBox , dan kontrol antarmuka pengguna lainnya menggunakan atribut android: contentDescription .

  2. Jadikan semua elemen antarmuka pengguna Anda dapat diakses dengan pengontrol arah, seperti trackball atau D-pad.

  3. Uji aplikasi Anda dengan menyalakan layanan aksesibilitas seperti TalkBack dan Explore by Touch, dan coba gunakan aplikasi Anda hanya menggunakan kontrol arah.

PhatHV
sumber
92
Satu lagi catatan penting! Dalam hal ini, sepertinya gambar tersebut murni dekoratif dan tidak memberikan informasi tambahan kepada pengguna. Jadi, misalnya, Anda tidak ingin berbicara "Gambar kontak" dengan pengguna tetapi Anda mungkin ingin berbicara "Foto profil Bob" jika Anda tidak menunjukkan teks itu di tempat lain. Jika gambar tidak boleh diucapkan kepada pengguna, Anda dapat mengatur android: contentDescription = "@ null" dan peringatan itu akan hilang.
alanv
1
@alanv: komentar luar biasa. Jauh lebih baik daripada menonaktifkan peringatan sepenuhnya seperti yang biasanya disarankan.
ChiefTwoPencils
13
Sebenarnya saya tidak berpikir android: contentDescription = "@ null" adalah solusi terbaik. Saya menggunakan alat: abaikan = "ContentDescription" itulah yang dimaksudkan. Pastikan Anda memasukkan xmlns: tools = " schemas.android.com/tools " di tata letak root Anda.
Sotti
terima kasih telah memberikan dokumen yang bagus. ketika Anda memiliki gambar seperti aplikasi galeri wallpaper, apakah cocok untuk menambahkan deskripsi konten untuk semua gambar? dan apakah itu dapat berdampak pada kinerja aplikasi?
Rahul Mandaliya
67

Tambahkan android:contentDescription="@string/description"(statis atau dinamis) ke ImageView Anda. Tolong jangan abaikan atau filter pesan, karena sangat membantu bagi orang-orang yang menggunakan metode input alternatif karena cacatnya (Seperti TalkBack, Tecla Access Shield, dll.).

Jeroen
sumber
@ Jeroen- Ketika saya menambahkan deskripsi, dikatakan: "Tidak dapat menyelesaikan resource @ string / loginText" - Mengapa begitu?
Jamal Zafar
Apakah Anda memiliki string loginText di XML string?
Praveen
1
@JamalZafar membuat string dalam string.xml dengan nama loginText
Ayush Goyal
36

Diperbarui:

Seperti yang ditunjukkan dalam komentar, pengaturan deskripsi ke nol menunjukkan bahwa gambar tersebut murni dekoratif dan dipahami oleh pembaca layar seperti TalkBack.

Jawaban lama, saya tidak lagi mendukung jawaban ini:

Untuk semua orang yang mencari cara menghindari peringatan:

Saya tidak berpikir android:contentDescription="@null"itu solusi terbaik.

Saya menggunakan tools:ignore="ContentDescription"itu yang dimaksudkan.

Pastikan Anda memasukkan xmlns:tools="http://schemas.android.com/tools"dalam tata letak root Anda.

Sotti
sumber
1
Yang ini harus ditingkatkan karena itu juga yang direkomendasikan Google
Le Dinh Nhat Khanh
4
Menggunakan @nullsebagai contentDescription adalah cara yang secara eksplisit mengatakan bahwa gambar ini murni dekoratif. Mengabaikan peringatan bukanlah solusi yang tepat.
karl
1
Menggunakan @nullmemberi tahu TalkBack bahwa gambar tersebut dekoratif. Anda tidak boleh mengabaikan peringatan itu karena memberi @nullinformasi kepada TalkBack daripada membuatnya berpikir itu hilang dan harus ada di sana.
Ab
10

Menambahkan

tools:ignore="ContentDescription"

ke gambar Anda. Pastikan Anda memiliki xmlns:tools="http://schemas.android.com/tools" .tata letak root Anda.

Mwongera808
sumber
1
+1. Ini adalah perbaikan Android Studio untuk masalah ini (ketika Anda melakukan analisis kode, tombol "tekan Lint" melakukan hal itu)
noamgot
9

Peringatan itu memang menjengkelkan dan dalam banyak (kebanyakan!) Kasus tidak ada contentDescription diperlukan untuk berbagai ImageViews dekoratif. Cara paling radikal untuk menyelesaikan masalah adalah dengan memberitahu Lint untuk mengabaikan pemeriksaan ini. Di Eclipse, buka "Android / Lint Error Checking" di Preferences, cari "contentDescription" (ada di grup "Aksesibilitas") dan ubah "Severity:" menjadi Abaikan.

AlexR
sumber
9
Jangan abaikan peringatan ini. Seperti orang lain telah menunjukkan aksesibilitas adalah penting bahkan jika itu hanya gambar dekoratif. Bukan masalah besar untuk menambahkan contentDescription yang diinginkan
jamesc
1
Anda juga dapat mengabaikan peringatan jika aplikasi Anda adalah salah satu yang pada dasarnya tidak dapat diakses bahkan dengan deskripsi konten. Misalnya, mengapa repot dengan contentDescriptionpermainan yang membutuhkan penglihatan agar bisa bermain?
CorayThan
Ya, itu adalah pilihan radikal; jadi apa yang dilakukan orang-orang yang mengetahui tujuan itu dan ingin mematuhi? Saya berani mengatakan bahwa dalam kasus khusus ini, lupakan kasus "kebanyakan"; yang tampaknya menyiratkan bahwa karena "kebanyakan" orang tidak, misalnya, buta itu adalah peringatan yang tidak perlu? Jika "sebagian besar" gambar Anda tidak memerlukan konten seperti itu - baik saja, nonaktifkan peringatan, tetapi tambahkan di tempat yang masuk akal. Menjadi sedikit membantu bisa sangat membantu.
ChiefTwoPencils
9

Jika Anda tidak peduli sama sekali, lakukan ini:

    android:contentDescription="@null"

Meskipun saya akan menyarankan solusi yang diterima, ini adalah hack: D

alap
sumber
3
Sebenarnya saya tidak berpikir android: contentDescription = "@ null" adalah solusi terbaik. Saya menggunakan alat: abaikan = "ContentDescription" itulah yang dimaksudkan. Pastikan Anda memasukkan xmlns: tools = " schemas.android.com/tools " di tata letak root Anda.
Sotti
Tidak ada yang mengatakan itu. Baca komentar lagi. Anda mengabaikan peringatan itu sehingga solusi yang Anda berikan jelas lebih buruk. Baca jawaban yang paling diterima lagi.
alap
5

Ke depan, untuk elemen grafis yang murni dekoratif , solusi terbaik adalah dengan menggunakan:

android:importantForAccessibility="no"

Ini masuk akal jika versi min SDK Anda setidaknya 16, karena perangkat yang menjalankan versi yang lebih rendah akan mengabaikan atribut ini.

Jika Anda terjebak mendukung versi yang lebih lama, Anda harus menggunakan (seperti yang sudah ditunjukkan orang lain):

android:contentDescription="@null"

Sumber: https://developer.android.com/guide/topics/ui/accessibility/apps#label-elements

arekolek
sumber
2

Peringatan ini mencoba meningkatkan aksesibilitas aplikasi Anda.

Untuk menonaktifkan peringatan deskripsi konten yang hilang di seluruh proyek, Anda dapat menambahkan ini ke build.gradle modul aplikasi Anda

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}
Maksim Turaev
sumber
0

Ini memberi Anda peringatan karena deskripsi gambar tidak ditentukan.

Kami dapat menyelesaikan peringatan ini dengan menambahkan kode di bawah ini di Strings.xml dan activity_main.xml

Tambahkan baris ini di bawah ini di Strings.xml

<string name="imgDescription">Background Picture</string>
you image will be like that:
<ImageView
        android:id="@+id/imageView2"
        android:lay`enter code hereout_width="0dp"
        android:layout_height="wrap_content"
        android:contentDescription="@string/imgDescription"
        app:layout_editor_absoluteX="0dp"
        app:layout_editor_absoluteY="0dp"
        app:srcCompat="@drawable/background1"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="0dp" />

Tambahkan juga baris ini di activity_main.xml

android:contentDescription="@string/imgDescription"

Strings.xml

<resources>
    <string name="app_name">Saini_Browser</string>
    <string name="SainiBrowser">textView2</string>
    <string name="imgDescription">BackGround Picture</string>
</resources>
Kuldeep Singh
sumber