„Brak atrybutu contentDescription na obrazie” w XML

222

Otrzymuję ostrzeżenie o [Accessibility] Missing contentDescription atrybut na obrazie w zaćmieniu. To ostrzeżenie jest wyświetlane w wierszu 5 (deklaracja ImageView) w kodzie XML poniżej.

Nie powoduje to błędu podczas kompilacji i uruchamiania mojej aplikacji. Ale naprawdę chcę wiedzieć, dlaczego otrzymuję to ostrzeżenie.

To jest mój plik 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>

Proszę o pomoc w tej sprawie i dziękuję za przeczytanie.

PhatHV
źródło
6
nowa sugestia wersji ADT dodaj android:contentDescriptionten atrybut imageview, tylko sugestia, myślę, że możesz to zignorować, to nie powoduje błędu kompilacji, możesz też sprawdzićhttp://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
idiottiger
tak, to prawda
Rahul Kushwaha

Odpowiedzi:

269

Kliknij ten link, aby uzyskać rozwiązanie: Android Lint contentOpis Ostrzeżenie

Rozwiązano to ostrzeżenie, ustawiając atrybut android: contentDescription dla mojego ImageView

android: contentDescription = "@ string / desc"

Obsługa Android Lint w ADT 16 generuje to ostrzeżenie, aby widżety obrazów zawierały opis treści

Definiuje tekst, który krótko opisuje treść widoku. Ta właściwość jest używana przede wszystkim ze względu na dostępność. Ponieważ niektóre widoki nie mają reprezentacji tekstowej, tego atrybutu można użyć do zapewnienia takich widoków.

Widżety nietekstowe, takie jak ImageViews i ImageButtons, powinny używać atrybutu contentDescription do określenia opisu tekstowego widgetu, tak aby czytniki ekranu i inne narzędzia ułatwiały dostęp do opisu interfejsu użytkownika.

Link do wyjaśnienia: Dostępność, wpływ i zasoby programistyczne

Wielu użytkowników Androida ma niepełnosprawności, które wymagają interakcji z urządzeniami z Androidem na różne sposoby. Należą do nich użytkownicy z niepełnosprawnościami wzrokowymi, fizycznymi lub związanymi z wiekiem, które uniemożliwiają im pełne widzenie lub korzystanie z ekranu dotykowego.

Android zapewnia funkcje i usługi ułatwień dostępu, które pomagają tym użytkownikom łatwiej poruszać się po urządzeniach, w tym funkcję zamiany tekstu na mowę, dotykowe sprzężenie zwrotne, trackball i nawigację na padzie kierunkowym, która poprawia ich wrażenia. Twórcy aplikacji na Androida mogą skorzystać z tych usług, aby zwiększyć dostępność swoich aplikacji, a także zbudować własne usługi ułatwień dostępu.

Ten przewodnik służy do udostępniania aplikacji: Zwiększanie dostępności aplikacji

Zapewnienie, że Twoja aplikacja jest dostępna dla wszystkich użytkowników, jest stosunkowo łatwe, szczególnie gdy używasz komponentów interfejsu użytkownika dostarczonych przez platformę. Jeśli używasz tylko tych standardowych komponentów do swojej aplikacji, musisz wykonać tylko kilka kroków, aby zapewnić dostępność aplikacji:

  1. Oznacz swoje ImageButton , ImageView , EditText , CheckBox i inne kontrolki interfejsu użytkownika za pomocą atrybutu android: contentDescription .

  2. Udostępnij wszystkie elementy interfejsu użytkownika za pomocą kontrolera kierunkowego, takiego jak trackball lub D-pad.

  3. Przetestuj swoją aplikację, włączając usługi ułatwień dostępu, takie jak TalkBack i Czytanie dotykiem, i spróbuj użyć aplikacji przy użyciu tylko elementów sterujących kierunkowych.

PhatHV
źródło
92
Jeszcze jedna ważna uwaga! W takim przypadku wygląda na to, że obraz ma charakter wyłącznie dekoracyjny i nie zapewnia użytkownikowi dodatkowych informacji. Na przykład nie chcesz mówić użytkownikowi „obrazu kontaktu”, ale możesz powiedzieć „zdjęcie profilowe Boba”, jeśli nie wyświetlasz tego tekstu w innym miejscu. Jeśli obraz nie powinien zostać przekazany użytkownikowi, możesz ustawić android: contentDescription = "@ null", a ostrzeżenie zniknie.
alanv
1
@alanv: świetny komentarz. O wiele lepsze niż całkowite wyłączenie ostrzeżenia, jak się powszechnie zaleca.
ChiefTwoPencils
13
Właściwie nie sądzę, że Android: contentDescription = "@ null" jest najlepszym rozwiązaniem. Korzystam z narzędzi: ignore = "ContentDescription", co ma być. Upewnij się, że umieściłeś xmlns: tools = " schemas.android.com/tools " w układzie głównym.
Sotti
dziękuję za dostarczenie tak ładnego dokumentu. jeśli masz zdjęcia takie jak aplikacja galerii tapet, czy można dodać opis zawartości dla wszystkich zdjęć? a także czy może to wpłynąć na wydajność aplikacji?
Rahul Mandaliya
67

Dodaj android:contentDescription="@string/description"(statyczny lub dynamiczny) do ImageView. Nie ignoruj ​​ani nie filtruj wiadomości, ponieważ jest to pomocne dla osób używających alternatywnych metod wprowadzania danych z powodu ich niepełnosprawności (takich jak TalkBack, Tecla Access Shield itp.).

Jeroen
źródło
@ Jeroen - Kiedy dodałem opis, mówi: „Nie można rozwiązać zasobu @ string / loginText” - Dlaczego tak jest?
Jamal Zafar
Czy masz ciąg loginText w ciągu XML?
Praveen
1
@JamalZafar utwórz ciąg w string.xml o nazwie loginText
Ayush Goyal
36

Zaktualizowano:

Jak wskazano w komentarzach, ustawienie opisu na null wskazuje, że obraz ma charakter wyłącznie dekoracyjny i jest rozumiany przez czytniki ekranu takie jak TalkBack.

Stara odpowiedź, nie popieram już tej odpowiedzi:

Dla wszystkich osób, które szukają sposobu uniknięcia ostrzeżenia:

Nie wydaje mi się, żeby android:contentDescription="@null"to było najlepsze rozwiązanie.

Używam tego tools:ignore="ContentDescription", co ma być.

Pamiętaj, aby uwzględnić xmlns:tools="http://schemas.android.com/tools"w swoim układzie głównym.

Sotti
źródło
1
Ten należy pochwalić, ponieważ jest to również to, co zalecił Google
Le Dinh Nhat Khanh
4
Używanie @nulljako zawartości Opis jest sposobem jednoznacznego stwierdzenia, że ​​ten obraz ma charakter wyłącznie dekoracyjny. Zwykłe zignorowanie ostrzeżenia nie jest właściwym rozwiązaniem.
karl
1
Używanie @nullinformuje TalkBack, że obraz jest dekoracyjny. Nie należy ignorować ostrzeżenia, ponieważ umieszczanie @nullinformuje TalkBack, zamiast myśleć, że brakuje go i powinno tam być.
Ab
10

Dodaj

tools:ignore="ContentDescription"

do twojego wizerunku. Upewnij się, że masz xmlns:tools="http://schemas.android.com/tools" .układ główny.

Mwongera808
źródło
1
+1. To jest poprawka Android Studio na ten problem (podczas wykonywania analizy kodu robi to tylko przycisk „
pomijaj włókna”
9

Ostrzeżenie jest rzeczywiście denerwujące iw wielu (większości!) Przypadkach nie jest wymagana żadna treść Opis różnych dekoracyjnych widoków obrazu. Najbardziej radykalnym sposobem rozwiązania problemu jest po prostu powiadomienie Linta, aby zignorował tę kontrolę. W Eclipse przejdź do „Sprawdzanie błędów Androida / Lint” w Preferencjach, znajdź „contentDescription” (jest w grupie „Dostępność”) i zmień „Istotność:” na Ignoruj.

AlexR
źródło
9
Nie ignoruj ​​tego ostrzeżenia. Jak zauważyli inni, dostępność jest ważna, nawet jeśli jest to tylko dekoracyjny obraz. Nie ma nic wielkiego, aby dodać pożądaną
treść Opis
1
Równie dobrze możesz zignorować to ostrzeżenie, jeśli Twoja aplikacja będzie zasadniczo niedostępna nawet przy opisach treści. Na przykład, po co zawracać sobie głowę contentDescriptiongrą, która wymaga wzroku, aby móc grać?
CorayThan
Tak, to jest radykalny wybór; więc co robią ludzie, którzy są świadomi tego celu i chcieliby się zastosować? Zaryzykowałbym stwierdzenie, że w tym konkretnym przypadku zapomnij o „większości” przypadków; wydaje się to sugerować, że ponieważ „większość” ludzi nie jest na przykład ślepa, to niepotrzebne ostrzeżenie? Jeśli „większość” twoich obrazów nie potrzebuje takiej treści - dobrze, wyłącz ostrzeżenie, ale dodaj je tam, gdzie ma to sens. Bycie trochę pomocnym może przejść długą drogę.
ChiefTwoPencils
9

Jeśli w ogóle cię to nie obchodzi, zrób to:

    android:contentDescription="@null"

Chociaż radziłbym przyjętym rozwiązaniom, jest to hack: D

Alap
źródło
3
Właściwie nie sądzę, że Android: contentDescription = "@ null" jest najlepszym rozwiązaniem. Korzystam z narzędzi: ignore = "ContentDescription", co ma być. Upewnij się, że umieściłeś xmlns: tools = " schemas.android.com/tools " w układzie głównym.
Sotti
Nikt tego nie powiedział. Przeczytaj komentarz ponownie. Po prostu zignoruj ​​to ostrzeżenie, więc podane rozwiązanie jest zdecydowanie gorsze. Przeczytaj ponownie najbardziej akceptowaną odpowiedź.
Alap
5

W przyszłości, w przypadku elementów graficznych o charakterze wyłącznie dekoracyjnym , najlepszym rozwiązaniem jest użycie:

android:importantForAccessibility="no"

Ma to sens, jeśli minimalna wersja zestawu SDK to co najmniej 16, ponieważ urządzenia z niższymi wersjami zignorują ten atrybut.

Jeśli utknąłeś przy obsłudze starszych wersji, powinieneś użyć (jak inni już zauważyli):

android:contentDescription="@null"

Źródło: https://developer.android.com/guide/topics/ui/accessibility/apps#label-elements

arekolek
źródło
2

To ostrzeżenie próbuje poprawić dostępność Twojej aplikacji.

Aby wyłączyć ostrzeżenie o brakującej treści w całym projekcie, możesz dodać to do build.gradle modułu aplikacji

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}
Maksim Turaev
źródło
0

Daje ostrzeżenie, ponieważ opis obrazu nie jest zdefiniowany.

Możemy rozwiązać to ostrzeżenie, dodając poniższy kod w Strings.xml i activity_main.xml

Dodaj tę linię poniżej w 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" />

Dodaj również ten wiersz w 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
źródło