"ไม่มี contentDescription attribute on image" ใน XML


222

ฉันได้รับคำเตือนเกี่ยวกับ[ความสามารถในการเข้าถึง] การหายไปของคุณลักษณะ contentDescription บนรูปภาพในคราส คำเตือนนี้แสดงที่บรรทัดที่ 5 (ประกาศImageView) ในโค้ด XML ด้านล่าง

สิ่งนี้ไม่ทำให้เกิดข้อผิดพลาดเมื่อสร้างและเรียกใช้แอปพลิเคชันของฉัน แต่ฉันอยากรู้ว่าทำไมฉันถึงได้รับคำเตือนนี้

นี่คือไฟล์ XML ของฉัน:

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

โปรดช่วยฉันเกี่ยวกับเรื่องนี้และขอบคุณสำหรับการอ่านของคุณ


6
ข้อเสนอแนะเวอร์ชัน ADT ใหม่เพิ่มandroid:contentDescriptionคุณลักษณะนี้ในimageviewเพียงข้อเสนอแนะฉันคิดว่าคุณสามารถละเว้นสิ่งนี้ได้มันไม่ได้ทำข้อผิดพลาดในการคอมไพล์นอกจากนี้คุณยังสามารถตรวจสอบได้http://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
idiottiger

ใช่ถูกต้องแล้ว
Rahul Kushwaha

คำตอบ:


269

ทำตามลิงค์นี้เพื่อแก้ปัญหา: Android ขุยเนื้อหาคำเตือนคำอธิบาย

แก้ไขคำเตือนนี้โดยการตั้งค่าคุณสมบัติ android: contentDescription สำหรับ ImageView ของฉัน

หุ่นยนต์: contentDescription = "@ สตริง / รายละเอียด"

การสนับสนุน Android Lint ใน ADT 16 จะส่งคำเตือนนี้เพื่อให้แน่ใจว่าวิดเจ็ตรูปภาพจัดเตรียม contentDescription

สิ่งนี้นิยามข้อความที่อธิบายเนื้อหาของมุมมองสั้น ๆ คุณสมบัตินี้ใช้เพื่อการเข้าถึงเป็นหลัก เนื่องจากบางมุมมองไม่มีการแสดงแทนข้อความคุณลักษณะนี้สามารถใช้สำหรับการจัดทำเช่นนี้

วิดเจ็ตที่ไม่ใช่ข้อความเช่น ImageViews และ ImageButtons ควรใช้แอ็ตทริบิวต์ contentDescription เพื่อระบุคำอธิบายเกี่ยวกับข้อความของวิดเจ็ตเช่นที่ผู้อ่านหน้าจอและเครื่องมือการเข้าถึงอื่น ๆ สามารถอธิบายส่วนติดต่อผู้ใช้ได้อย่างเพียงพอ

ลิงค์นี้สำหรับคำอธิบาย: การเข้าถึง, ผลกระทบและการพัฒนาทรัพยากร

ผู้ใช้ Android หลายคนมีความพิการที่ต้องการให้พวกเขามีปฏิสัมพันธ์กับอุปกรณ์ Android ของพวกเขาในรูปแบบที่แตกต่างกัน ซึ่งรวมถึงผู้ใช้ที่มีความพิการทางสายตาทางร่างกายหรืออายุที่เกี่ยวข้องกับการป้องกันไม่ให้พวกเขาเห็นหรือใช้หน้าจอสัมผัส

Android มีคุณสมบัติการเข้าถึงและบริการที่ช่วยให้ผู้ใช้เหล่านี้นำทางอุปกรณ์ของพวกเขาได้ง่ายขึ้นรวมถึงการอ่านออกเสียงข้อความตอบกลับแบบสัมผัสแทร็กบอลและการนำทาง D-pad ที่เสริมประสบการณ์ของพวกเขา นักพัฒนาแอปพลิเคชัน Android สามารถใช้ประโยชน์จากบริการเหล่านี้เพื่อให้แอปพลิเคชันเข้าถึงได้มากขึ้นและสร้างบริการการเข้าถึงของตนเอง

คู่มือนี้มีไว้เพื่อให้แอปของคุณสามารถเข้าถึงได้: ทำให้แอปเข้าถึงได้ง่ายขึ้น

ตรวจสอบให้แน่ใจว่าผู้ใช้ทุกคนสามารถเข้าถึงแอปพลิเคชันของคุณได้ง่ายโดยเฉพาะเมื่อคุณใช้ส่วนประกอบส่วนต่อประสานกับผู้ใช้ที่มีเฟรมเวิร์ก หากคุณใช้ส่วนประกอบมาตรฐานเหล่านี้สำหรับแอปพลิเคชันของคุณมีเพียงไม่กี่ขั้นตอนที่จำเป็นเพื่อให้แน่ใจว่าแอปพลิเคชันของคุณสามารถเข้าถึงได้:

  1. ติดป้ายกำกับImageButton , ImageView , EditText , CheckBoxและส่วนต่อประสานผู้ใช้อื่น ๆ โดยใช้android: contentDescription attribute

  2. ทำให้องค์ประกอบส่วนต่อประสานผู้ใช้ทั้งหมดของคุณสามารถเข้าถึงได้ด้วยตัวควบคุมทิศทางเช่น trackball หรือ D-pad

  3. ทดสอบแอปพลิเคชันของคุณโดยเปิดบริการการเข้าถึงเช่น TalkBack และ Explore by Touch แล้วลองใช้แอปพลิเคชันของคุณโดยใช้การควบคุมเฉพาะทิศทาง


92
หมายเหตุสำคัญอีกประการหนึ่ง! ในกรณีนี้ดูเหมือนว่าภาพจะได้รับการตกแต่งอย่างหมดจดและไม่ได้ให้ข้อมูลเพิ่มเติมแก่ผู้ใช้ ตัวอย่างเช่นคุณไม่ต้องการพูดว่า "รูปติดต่อ" กับผู้ใช้ แต่คุณอาจต้องการพูดว่า "รูปโปรไฟล์ของ Bob" หากคุณไม่แสดงข้อความนั้นในที่อื่น หากรูปภาพไม่ควรพูดกับผู้ใช้คุณสามารถตั้งค่า android: contentDescription = "@ null" และคำเตือนจะหายไป
alanv

1
@alanv: ความคิดเห็นที่ดี ดีกว่าปิดการใช้งานคำเตือนอย่างสมบูรณ์ตามที่แนะนำโดยทั่วไป
ChiefTwoPencils

13
ที่จริงฉันไม่คิดว่า Android: contentDescription = "@ null" เป็นทางออกที่ดีที่สุด ฉันใช้เครื่องมือ: ละเว้น = "ContentDescription" นั่นคือสิ่งที่ควรจะเป็น ตรวจสอบให้แน่ใจว่าคุณใส่ xmlns: tools = " schemas.android.com/tools " ในรูปแบบรูทของคุณ
Sotti

ขอบคุณที่ให้บริการเอกสารที่ดีเช่นนี้ เมื่อคุณมีรูปภาพเช่นแอพแกลเลอรี่ภาพพื้นหลังมันเหมาะที่จะเพิ่มคำอธิบายเนื้อหาสำหรับภาพทั้งหมด และยังส่งผลต่อประสิทธิภาพของแอพด้วยหรือไม่
ราหุลมันดาลิยา

67

เพิ่มandroid:contentDescription="@string/description"(คงที่หรือไดนามิก) ไปยัง ImageView ของคุณ โปรดอย่าเพิกเฉยหรือกรองข้อความเพราะเป็นประโยชน์สำหรับผู้ใช้วิธีการป้อนข้อมูลทางเลือกเนื่องจากความพิการ (เช่น TalkBack, Tecla Access Shield ฯลฯ ฯลฯ )


@ Jeroen- เมื่อฉันเพิ่มคำอธิบายมันกำลังพูดว่า: "ไม่สามารถแก้ไขทรัพยากร @ string / loginText" - ทำไมจึงเป็นเช่นนั้น
Jamal Zafar

คุณมีสตริง loginText ใน XML สตริงหรือไม่
Praveen

1
@JamalZafar สร้างสตริงใน string.xml ด้วยชื่อ loginText
Ayush Goyal

36

Updated:

ดังที่ได้กล่าวไว้ในความคิดเห็นการตั้งค่าคำอธิบายให้เป็นโมฆะเป็นการระบุว่าภาพนั้นได้รับการตกแต่งอย่างหมดจดและเป็นที่เข้าใจกันโดยผู้อ่านหน้าจอเช่น TalkBack

คำตอบเก่าฉันไม่สนับสนุนคำตอบนี้อีกต่อไป:

สำหรับทุกคนที่กำลังมองหาวิธีหลีกเลี่ยงการเตือน:

ฉันไม่คิดว่าandroid:contentDescription="@null"เป็นทางออกที่ดีที่สุด

ฉันกำลังใช้tools:ignore="ContentDescription"นั่นคือสิ่งที่ตั้งใจจะเป็น

ตรวจสอบให้แน่ใจว่าคุณรวมxmlns:tools="http://schemas.android.com/tools"อยู่ในเค้าโครงรูทของคุณ


1
ควรอัปเดตสิ่งนี้เพราะเป็นสิ่งที่ Google แนะนำ
Le Dinh Nhat Khanh

4
การใช้@nullเป็น contentDescription เป็นวิธีการที่บอกอย่างชัดเจนว่าภาพนี้ได้รับการตกแต่งอย่างหมดจด การเพิกเฉยต่อคำเตือนไม่ใช่วิธีที่ถูกต้อง
karl

1
ใช้@nullบอก TalkBack ว่าภาพตกแต่ง คุณไม่ควรเพิกเฉยต่อคำเตือนเนื่องจาก@nullแจ้งให้ TalkBack แทนที่จะทำให้มันคิดว่ามันหายไปและควรอยู่ที่นั่น
Ab

10

เพิ่ม

tools:ignore="ContentDescription"

กับภาพของคุณ ตรวจสอบให้แน่ใจว่าคุณมีxmlns:tools="http://schemas.android.com/tools" .รูปแบบรูทของคุณ


1
+1 นี่คือการแก้ไข Android สตูดิโอสำหรับปัญหานี้ (เมื่อคุณทำการรหัสวิเคราะห์ที่ปุ่ม "ปราบผ้าสำลี" ไม่เพียงแค่นั้น)
noamgot

9

คำเตือนนั้นน่ารำคาญและในหลาย ๆ กรณี (ส่วนใหญ่!) ไม่จำเป็นต้องมี contentDescription สำหรับการตกแต่ง ImageViews ต่างๆ วิธีที่รุนแรงที่สุดในการแก้ปัญหาคือเพียงบอกให้ผ้าสำลีเพิกเฉยต่อการตรวจสอบนี้ ใน Eclipse ไปที่ "Android / Lint Error Checking" ในการตั้งค่าค้นหา "contentDescription" (อยู่ในกลุ่ม "การเข้าถึง") และเปลี่ยน "Severity:" เป็น Ignore


9
อย่าเพิกเฉยต่อคำเตือนนี้ ตามที่คนอื่น ๆ ได้ชี้ให้เห็นว่าการเข้าถึงเป็นสิ่งสำคัญแม้ว่าจะเป็นเพียงแค่ภาพตกแต่ง ไม่ใช่เรื่องใหญ่ที่จะเพิ่มเนื้อหาที่ต้องการคำอธิบาย
jamesc

1
คุณอาจเพิกเฉยต่อคำเตือนหากแอปของคุณเป็นแอปที่ไม่สามารถเข้าถึงได้แม้จะมีคำอธิบายเนื้อหา ตัวอย่างเช่นเหตุใดจึงต้องใส่ใจcontentDescriptionในเกมที่ต้องใช้สายตาในการเล่น
CorayThan

ใช่นั่นคือทางเลือกที่ต่างไปจากเดิมอย่างสิ้นเชิง ดังนั้นคนที่ทำอะไรตระหนักถึงวัตถุประสงค์และต้องการที่จะปฏิบัติตาม? ฉันอยากจะบอกว่าในกรณีนี้โดยเฉพาะลืมกรณี "ส่วนใหญ่"; ที่ดูเหมือนจะแปลว่าเพราะคน "คนส่วนใหญ่" ไม่ใช่คนตาบอดมันเป็นคำเตือนที่ไม่จำเป็นเลยเหรอ? หากภาพของคุณ "ส่วนใหญ่" ไม่ต้องการเนื้อหาดังกล่าว - ปรับใช้ปิดการเตือน แต่เพิ่มลงในตำแหน่งที่เหมาะสม การช่วยเหลือเล็กน้อยสามารถไปได้ไกล
ChiefTwoPencils

9

หากคุณไม่สนใจเลยให้ทำดังนี้

    android:contentDescription="@null"

แม้ว่าฉันจะแนะนำวิธีแก้ปัญหาที่ยอมรับได้ แต่นี่ก็เป็นแฮ็ก: D


3
ที่จริงฉันไม่คิดว่า Android: contentDescription = "@ null" เป็นทางออกที่ดีที่สุด ฉันใช้เครื่องมือ: ละเว้น = "ContentDescription" นั่นคือสิ่งที่ควรจะเป็น ตรวจสอบให้แน่ใจว่าคุณใส่ xmlns: tools = " schemas.android.com/tools " ในรูปแบบรูทของคุณ
Sotti

ไม่มีใครพูดว่า อ่านความคิดเห็นอีกครั้ง คุณเพียงเพิกเฉยต่อคำเตือนดังนั้นวิธีการแก้ปัญหาที่คุณให้นั้นแย่กว่านั้นแน่นอน อ่านคำตอบที่ยอมรับมากที่สุดอีกครั้ง
alap

5

ก้าวต่อไปสำหรับองค์ประกอบกราฟิกที่ตกแต่งอย่างหมดจดทางออกที่ดีที่สุดคือการใช้:

android:importantForAccessibility="no"

สิ่งนี้สมเหตุสมผลถ้าเวอร์ชัน SDK ขั้นต่ำของคุณมีค่าอย่างน้อย 16 ค่าเนื่องจากอุปกรณ์ที่ใช้เวอร์ชันต่ำกว่าจะไม่สนใจแอตทริบิวต์นี้

หากคุณยังคงสนับสนุนเวอร์ชันเก่าอยู่คุณควรใช้ (เหมือนที่คนอื่นชี้ไว้แล้ว):

android:contentDescription="@null"

ที่มา: https://developer.android.com/guide/topics/ui/accessibility/apps#label-elements


2

คำเตือนนี้พยายามปรับปรุงการเข้าถึงแอปพลิเคชันของคุณ

หากต้องการปิดใช้งานคำเตือนคำอธิบายเนื้อหาที่หายไปในโครงการทั้งหมดคุณสามารถเพิ่มสิ่งนี้ลงในโมดูลแอปพลิเคชันของคุณ build.gradle

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}

0

มันจะให้คำเตือนคุณเพราะคำอธิบายภาพไม่ได้กำหนดไว้

เราสามารถแก้ไขคำเตือนนี้ได้โดยการเพิ่มรหัสนี้ด้านล่างใน Strings.xml และ activity_main.xml

เพิ่มบรรทัดนี้ด้านล่างใน 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" />

เพิ่มบรรทัดนี้ใน 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.