Unterschied zwischen android:id und android:labelFor?
Lesezeit: 5 Minuten
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?
Mögliches Duplikat der Warnmeldung Bedeutung der Warnmeldung „Keine Beschriftungsansichten verweisen auf dieses Textfeld“.
– JA
29. November 2015 um 8:24 Uhr
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.
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.
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.
Benny
android:labelFor
Verwenden Sie dieses Attribut, um anzugeben, dass eine Ansicht als Inhaltsbezeichnung für eine andere Ansicht dienen soll.
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