Unterschied zwischen android:id und android:labelFor?

Lesezeit: 5 Minuten

Benutzeravatar von CoDe
Code

Ich habe ein einfaches Layout geschrieben, das eine hat EditTextaber es wird die folgende Warnmeldung angezeigt:

„Keine Beschriftungsansichten verweisen auf dieses Textfeld“

Bei der Suche habe ich dies gefunden und diese Warnmeldung gelöst, aber keinen Unterschied zwischen beiden Attributen festgestellt android:id Und android:labelFor. Irgendwelche Klarstellungen?

  • Das könnte hilfreich sein

    – Nir Alfasi

    14. Juli 2014 um 7:11 Uhr

  • Mögliches Duplikat der Warnmeldung Bedeutung der Warnmeldung „Keine Beschriftungsansichten verweisen auf dieses Textfeld“.

    – JA

    29. November 2015 um 8:24 Uhr

Benutzeravatar meines Gottes
Mein Gott

android:id

Geben Sie einen Bezeichnernamen für diese Ansicht an, um sie später abzurufen
View.findViewById() oder Activity.findViewById(). Dies muss eine Ressourcenreferenz sein; Normalerweise legen Sie dies mit der Syntax @+ fest, um neue ID-Ressourcen zu erstellen. Zum Beispiel: android:id=”@+id/my_id”, mit dem Sie die Ansicht später abrufen können findViewById(R.id.my_id).

Muss ein Verweis auf eine andere Ressource im Formular sein
"@[+][package:]type:name" oder zu einem Themenattribut in der Form “?[package:][type:]Name”.

Dies entspricht der globalen Attribut-Ressourcensymbol-ID.


android:labelFor

öffentlich statisch final int EtikettFür

Gibt die ID einer Ansicht an, für die diese Ansicht als Bezeichnung für Barrierefreiheitszwecke dient. Beispielsweise gibt eine TextView vor einem EditText in der Benutzeroberfläche normalerweise an, welche Informationen in EditText enthalten sind. Daher ist die TextView eine Bezeichnung für den EditText.

Muss ein ganzzahliger Wert sein, z. B. “100”.

Dies kann auch ein Verweis auf eine Ressource sein (in der Form “@[package:]type:name”) oder Theme-Attribut (in der Form “?[package:][type:]name”), die einen Wert dieses Typs enthält.

Konstanter Wert: 16843718 (0x010103c6)

AKTUALISIEREN:

Zum Beispiel –

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical">
    <LinearLayout android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_width="match_parent">
     <TextView android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:labelFor="@+id/edit_item_name" 
    android:text="Item Name"/>
     <EditText android:id="@+id/edit_item_name" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="Item Name"/>
    </LinearLayout>
  </LinearLayout>

Referenz: android:id Und android:labelFor.

  • In meinem Fall gibt es eine Warnung für EditText Field und wenn ich das LabelFor-Attribut in EditText aktualisiere, ging die Warnung. Hier aktualisieren Sie dasselbe Attribut für TextView … Mir ist immer noch nicht klar, in welcher Referenz es verwendet werden soll.

    – Code

    14. Juli 2014 um 9:06 Uhr


  • Was ist der Vorteil des Setzens von Labelfor?

    – Psypher

    2. Dezember 2014 um 19:04 Uhr

  • @Psypher Zugänglichkeitszwecke – ohne dies hat ein Bildschirmleser Probleme, die Bezeichnung für ein Eingabefeld zu kennen, und Blinde können nicht “sehen”, dass sich die Bezeichnung neben einem Feld befindet.

    – Blaisorlade

    20. September 2016 um 18:55 Uhr

  • Es wäre gut, den Grund für das Vielfache zu erklären +s, vom Lesen der Dokumente klingt es so, als sollten sie nicht da sein. Siehe Kommentare unten: stackoverflow.com/questions/24731137/…

    – Blaisorlade

    20. September 2016 um 18:56 Uhr


  • Für diejenigen, die möglicherweise nicht den Ruf haben, gelöschte Antworten anzuzeigen, fand ich diesen Kommentar aus einer gelöschten Antwort sehr hilfreich: Wenn die XML-Elemente neu geordnet werden, schlägt das Weglassen des “+” fehl. (Und Android Studio ordnet die Reihenfolge gerne neu, wenn es keine Rolle spielt). Mehrmaliges Hinzufügen schadet nicht, und Weglassen ist eine Formel für zukünftige Kopfschmerzen.

    – BlueMonkMN

    19. Dezember 2017 um 1:03 Uhr

android:id definiert die ID dieser Ansicht.

android:labelFor verweist auf die ID einer anderen Ansicht.

android:id Einfach die Ansichts-ID, um (programmgesteuert) auf die Ansicht zuzugreifen.

android:labelFor erscheint manchmal in Kombination mit der Fusselwarnung:

Fehlende Barrierefreiheitsbezeichnung: Stellen Sie entweder eine Ansicht mit einem „android:labelFor“ bereit, das auf diese Ansicht verweist, oder geben Sie einen „android:hint“ an.

Also zum Beispiel: Wenn Sie eine haben EditText das sich nicht selbst beschreibt, Android fragt sich, ob Sie vielleicht einen Titel oder Text haben (TextView), die möglicherweise beschreibt, wofür der EditText verwendet wird. Verweisen Sie also auf die ID der TextView gibt Ihnen im Grunde eine Vorstellung davon, was Sie in die einfügen sollten EditText mit seinem Text im barrierefreien Modus.

Sehen:
https://developer.android.com/guide/topics/ui/accessibility/principles#editable

Zusätzlich zu allen Antworten, wenn Sie keine XML-Dateien für Apps verwenden, ist dies eine kurze Erklärung, wofür VIEW ID dient:

(Übrigens ist meiner Meinung nach die Verwendung von XML scheiße – meine einzige XML-Datei ist manifest: D generiert von Gradle)

@IdRes – Anmerkung für Ressourcen-ID

/** define resource id for view */
@IdRes 
int TEXT_VIEW_ID  = "111111";

/** create edit tex in code */
EditText myTextView = new EditText(Context);
/** set view id */
myTextView.setID(TEXT_VIEW_ID);
/** set layout params etc then attach or inflate as u wish to view hierarchy */    

/** use view id to find view */
EditText etFound = (EditText) View.findViewById(TEXT_VIEW_ID);

p.s. Die ID ist obligatorisch, um den Status der Hierarchieansicht beizubehalten, wenn Activity.onSaveInstanceState(Bundle) verwendet wird. Wenn Sie also im Code erstellen (VIEW / WIDGET / LAYOUT usw.), vergessen Sie nicht, sie festzulegen.

Benutzeravatar von Benny
Benny

android:labelFor

Verwenden Sie dieses Attribut, um anzugeben, dass eine Ansicht als Inhaltsbezeichnung für eine andere Ansicht dienen soll.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/email_subject_label"
        android:labelFor="@id/email_subject" />
    <EditText
        android:id="@+id/email_subject"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

Für mehr Details: Android-Barrierefreiheit – So stellen Sie Inhaltslabels bereit

1447960cookie-checkUnterschied zwischen android:id und android:labelFor?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy