2014-07-14 15 views
24

Ich schreibe ein einfaches Layout, das und EditText hat, aber es folgende Warnmeldung zeigt,Unterschied zwischen Android: ID und Android: LabelFor?

„No-Label Ansichten zu diesem Textfeld Punkt“

Während ich this habe gesucht und es zu lösen, dass Warnmeldung auch. Es wurde jedoch kein Unterschied zwischen den beiden Attributen android:id und android:labelFor festgestellt. Jede Klärung!

+1

[* this *] (http://thecodeiscompiling.blogspot.com/2013/12/android-labelfor-waning-fix.html) kann hilfreich sein – alfasin

+0

Mögliche Duplikate von [Bedeutung von "Keine Labelansichten zeigen darauf hin Textfeld "Warnmeldung" (http://stackoverflow.com/questions/16896082/meaning-of-no-label-views-point-to-this-text-field-warning-message) – YEH

Antwort

32

android: id

Versorgung eine Kennung Name für diese Ansicht, später abzurufen es mit View.findViewById() oder Activity.findViewById(). Dies muss eine Ressourcenreferenz sein; In der Regel setzen Sie dies mit der @ + -Syntax auf , um neue ID-Ressourcen zu erstellen. Zum Beispiel: android: id = "@ + id/my_id", die ermöglicht Ihnen, später die Ansicht mit findViewById(R.id.my_id) abrufen.

Muss ein Verweis auf eine andere Ressource in Form "@[+][package:]type:name" oder zu einem Thema Attribut in Form "[package:]? [Typ:] name".

Dies entspricht der globalen Attribut-Ressourcensymbol-ID.


android: für Zugänglichkeit LabelFor

public static final int LabelFor

die ID einer Ansicht an, für den diese Ansicht als Markierung dient Zwecke. Zum Beispiel gibt ein TextView vor einem EditText in der UI normalerweise an, welche Informationen im EditText enthalten sind. Daher ist die TextView eine Bezeichnung für den EditText.

Muss ein ganzzahliger Wert sein, z. B. "100".

Dies auch ein Verweis auf eine Ressource sein kann (in Form "@ [package:] Typ: name") oder ein Thema Attribut (in Form "? [Package:] [Typ:] name") einen Wert dieses Typs enthalten.

Konstante Wert: 16.843.718 (0x010103c6)

UPDATE:

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.

+0

in meinem Fall gibt es eine Warnung für EditText Field und wenn ich labelFor Attribut in EditText aktualisieren, wurde die Warnung ausgelöst. Hier aktualisieren Sie das gleiche Attribut für TextView ... Ich bin immer noch nicht klar, in welcher Referenz es verwendet werden soll. – CoDe

+8

Was ist der Vorteil der Einstellung labelfor? – Psypher

+2

@Psypher Zugänglichkeits-Zwecke - ohne dass ein Bildschirmleser Probleme hat, zu wissen, was die Bezeichnung für ein Eingabefeld ist, und die Jalousie nicht "sehen" kann, ist das Etikett neben einem Feld. – Blaisorblade

1

android:id definiert die ID dieser Ansicht.

android:labelFor verweist auf die ID einer anderen Ansicht.

9

Das labelFor ist ein Attribut für Zugänglichkeitsoptionen. Sie weisen dies einem Label zu, so dass, wenn der Benutzer in einem Formular auf ein EditText Feld klickt, der Benutzer wissen kann, was er lesen soll (TalkBack für Low-Vision-Benutzer).

Die id Geben Sie einen Bezeichnernamen für diese Ansicht ein, um sie später mit View.findViewById() oder Activity.findViewById() abzurufen.

+0

so ist, um es zu unterstützen Label-Feld, wie Name (Label) bezüglich seines Eingabefeldes. – CoDe

0

zusätzlich zu allen Antworten, wenn u XML-Dateien nicht für Apps nutzen, dies ist eine kurze Erklärung, was dient ID VIEW:

(btw meiner Meinung nach XML saugt - meine einzige XML-Datei ist manifest: D von Gradle generiert)

@IdRes - Annotation 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); 

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