2012-03-16 30 views
171

Tôi nhận được cảnh báo về [Trợ năng] Thiếu thuộc tính contentDescription trên hình ảnh trong nhật thực. Cảnh báo này hiển thị ở dòng 5 (khai báo ImageView) trong mã XML bên dưới.'Thiếu thuộc tính contentDescription trên hình ảnh' trong XML

Điều này không gây ra bất kỳ lỗi nào khi xây dựng và chạy ứng dụng của tôi. Nhưng tôi thực sự muốn biết tại sao tôi nhận được cảnh báo này.

Đây là tập tin XML của tôi:

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

Xin hãy giúp tôi về vấn đề này và cảm ơn bạn đọc.

+6

đề xuất phiên bản ADT mới thêm 'android: contentDescription' thuộc tính này vào' imageview', chỉ là gợi ý, tôi nghĩ bạn có thể bỏ qua điều này, nó không tạo lỗi biên dịch, bạn cũng có thể kiểm tra 'http: // developer. android.com/reference/android/view/View.html#attr_android: contentDescription' – idiottiger

+0

@idiottiger: Cảm ơn nhận xét của bạn. – PhatHV

Trả lời

236

theo liên kết này để giải quyết:Android Lint contentDescription warning

giải quyết cảnh báo này bằng cách thiết lập android thuộc tính: contentDescription cho ImageView tôi

android: contentDescription = "@ string/desc"

Hỗ trợ Android Lint trong ADT 16 ném cảnh báo này để đảm bảo rằng tiện ích hình ảnh cung cấp nội dungMô tả

Điều này xác định văn bản mô tả ngắn gọn nội dung của chế độ xem. Điều này tài sản được sử dụng chủ yếu cho khả năng tiếp cận. Vì một số chế độ xem không có thể hiển thị văn bản thuộc tính này để cung cấp như vậy.

widget không phải là văn bản như ImageViews và ImageButtons nên sử dụng thuộc tính contentDescription để xác định một mô tả văn bản của phụ tùng như vậy mà đọc màn hình và công cụ tiếp cận khác có thể mô tả đầy đủ các giao diện người dùng.

Liên kết này giải thích:Accessibility, It's Impact and Development Resources

Nhiều người dùng Android có khuyết tật mà đòi hỏi họ phải tương tác với các thiết bị Android của họ theo những cách khác nhau. Những người dùng này bao gồm người dùng có khuyết tật về hình ảnh, thể chất hoặc tuổi tác ngăn họ xem hoặc sử dụng màn hình cảm ứng.

Android cung cấp tính năng tiếp cận và dịch vụ để giúp những người dùng điều hướng thiết bị của họ một cách dễ dàng hơn, bao gồm text-to-speech, phản hồi haptic, trackball và chuyển hướng D-pad mà augments kinh nghiệm của họ. Các nhà phát triển ứng dụng Android có thể tận dụng các dịch vụ này để làm cho các ứng dụng của họ dễ truy cập hơn và cũng có thể xây dựng các dịch vụ trợ năng của riêng họ .

Hướng dẫn này là để làm cho ứng dụng của bạn truy cập:Making Apps More Accessible

Đảm bảo ứng dụng của bạn có thể truy cập đến tất cả người dùng là tương đối dễ dàng, đặc biệt là khi bạn sử dụng giao diện người dùng framework-cung cấp thành phần. Nếu bạn chỉ sử dụng các thành phần tiêu chuẩn cho các ứng dụng của bạn, có chỉ là một vài bước cần thiết để đảm bảo ứng dụng của bạn được truy cập:

  1. Label của bạn ImageButton, ImageView, EditText, Hộp kiểm và người dùng khác int điều khiển bề mặt bằng cách sử dụng thuộc tính android: contentDescription.

  2. Làm cho tất cả các thành phần giao diện người dùng của bạn có thể truy cập bằng bộ điều khiển có hướng, chẳng hạn như bi xoay hoặc D-pad.

  3. thử nghiệm ứng dụng của bạn bằng cách bật dịch vụ trợ năng như TalkBack và Khám phá bằng Touch, và thử sử dụng ứng dụng của bạn sử dụng các điều khiển chỉ định hướng.

+75

Một lưu ý quan trọng khác! Trong trường hợp này, có vẻ như hình ảnh hoàn toàn là trang trí và không cung cấp thông tin bổ sung cho người dùng. Vì vậy, ví dụ: bạn sẽ không muốn nói "Liên hệ với hình ảnh" với người dùng nhưng bạn có thể muốn nói "Ảnh hồ sơ của Bob" nếu bạn không hiển thị văn bản đó ở bất kỳ nơi nào khác. Nếu hình ảnh không được nói với người dùng, bạn có thể đặt android: contentDescription = "@ null" và cảnh báo sẽ biến mất. – alanv

+1

@alanv: nhận xét tuyệt vời. Tốt hơn nhiều so với vô hiệu hóa cảnh báo hoàn toàn như thông thường. – ChiefTwoPencils

+8

Thực ra tôi không nghĩ android: contentDescription = "@ null" là giải pháp tốt nhất. Tôi đang sử dụng các công cụ: ignore = "ContentDescription" đó là những gì có nghĩa là. Đảm bảo bạn bao gồm xmlns: tools = "http://schemas.android.com/tools" trong bố cục gốc của bạn. – Sotti

9

Cảnh báo thực sự gây phiền nhiễu và trong nhiều (nhất!) Các trường hợp không contentDescription là cần thiết cho ImageViews trang trí khác nhau. Cách triệt để nhất để giải quyết vấn đề là chỉ để cho Lint bỏ qua kiểm tra này. Trong Eclipse, chuyển đến "Kiểm tra lỗi Android/Lint" trong Tùy chọn, tìm "contentDescription" (trong nhóm "Trợ năng") và thay đổi "Mức độ nghiêm trọng:" thành Bỏ qua.

+9

Đừng bỏ qua cảnh báo này. Như những người khác đã chỉ ra khả năng tiếp cận là quan trọng ngay cả khi nó chỉ là một hình ảnh trang trí. Bạn không cần phải thêm contentDescription mong muốn – jamesc

+0

Bạn cũng có thể bỏ qua cảnh báo nếu ứng dụng của bạn là ứng dụng cơ bản không thể tiếp cận được ngay cả với mô tả nội dung. Ví dụ: tại sao phải bận tâm với 'contentDescription' trong trò chơi yêu cầu tầm nhìn để có thể chơi? – CorayThan

+0

Vâng, đó là * lựa chọn căn bản; vậy mọi người làm gì để ý thức được mục đích của nó và muốn tuân thủ? Tôi sẽ mạo hiểm để nói rằng trong trường hợp đặc biệt này, hãy quên đi "hầu hết" trường hợp; dường như ngụ ý rằng bởi vì "hầu hết" mọi người không, ví dụ, mù là một cảnh báo không cần thiết? Nếu "hầu hết" các hình ảnh của bạn không cần nội dung như vậy - tốt, hãy tắt cảnh báo, nhưng thêm nó vào nơi có ý nghĩa. Một chút hữu ích có thể đi một chặng đường dài. – ChiefTwoPencils

58

Thêm android:contentDescription="@string/description" (tĩnh hoặc động) vào ImageView của bạn. Vui lòng không bỏ qua cũng như lọc thư, vì nó hữu ích cho những người sử dụng phương thức nhập thay thế vì khuyết tật của họ (như TalkBack, Tecla Access Shield, v.v.).

+0

@ Jeroen- Khi tôi thêm mô tả, nó đang nói: "Không thể giải quyết tài nguyên @ string/loginText" - Tại sao vậy? –

+0

Bạn có chuỗi loginText trong chuỗi XML không? – Praveen

+1

@JamalZafar tạo một chuỗi trong string.xml với tên loginText –

8

Nếu bạn không quan tâm chút nào làm điều này:

android:contentDescription="@null" 

Mặc dù tôi sẽ tư vấn các giải pháp chấp nhận, đây là một hack: D

+3

Thực ra tôi không nghĩ android: contentDescription = "@ null" là giải pháp tốt nhất. Tôi đang sử dụng các công cụ: ignore = "ContentDescription" đó là những gì có nghĩa là. Đảm bảo bạn bao gồm xmlns: tools = "http://schemas.android.com/tools" trong bố cục gốc của bạn. – Sotti

+0

Không ai nói vậy. Đọc lại nhận xét. Bạn chỉ cần bỏ qua cảnh báo để giải pháp mà bạn cung cấp chắc chắn tồi tệ hơn. Đọc lại câu trả lời được chấp nhận nhiều nhất. – alap

17

Cập nhật:

Như nhọn trong các nhận xét, việc đặt mô tả thành null cho biết hình ảnh hoàn toàn là trang trí và được hiểu bởi trình đọc màn hình như TalkBack.

Cũ câu trả lời, tôi không còn hỗ trợ câu trả lời này:

Đối với tất cả những người tìm cách để tránh những cảnh báo:

Tôi không nghĩ android:contentDescription="@null" sự là giải pháp tốt nhất.

Tôi đang sử dụng tools:ignore="ContentDescription" đó là những gì có nghĩa là phải.

Đảm bảo bạn bao gồm xmlns:tools="http://schemas.android.com/tools" trong bố cục gốc.

+1

Điều này cần được bỏ phiếu vì đó cũng là điều Google đã đề xuất –

+3

Sử dụng '@ null' làm nội dungMô tả là cách nói rõ ràng rằng hình ảnh này hoàn toàn là trang trí. Chỉ cần bỏ qua cảnh báo không phải là giải pháp đúng. – karl

+0

Sử dụng '@ null' cho TalkBack biết rằng hình ảnh đó được trang trí. Bạn không nên bỏ qua cảnh báo khi đặt '@ null' thông báo TalkBack thay vì làm cho nó nghĩ rằng nó thiếu và nên ở đó. –

3

Thêm

tools:ignore="ContentDescription" 

để hình ảnh của bạn. Đảm bảo bạn có xmlns:tools="http://schemas.android.com/tools" . trong bố cục gốc.

Các vấn đề liên quan