wake-up-neo.com

Unterschied zwischen Android: id und Android: labelFor?

Ich habe ein einfaches Layout mit einem EditText geschrieben, aber es zeigt die folgende Warnmeldung:

"Keine Beschriftungsansichten verweisen auf dieses Textfeld"

Während der Suche fand ich this und es löste diese Warnmeldung, bekam aber keinen Unterschied zwischen beiden Attributen Android:id und Android:labelFor. Irgendeine Klarstellung?

37
CoDe

Android: id

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

Muss ein Verweis auf eine andere Ressource sein, in der Form "@[+][package:]type:name" oder auf ein Designattribut im Format "? [Paket:] [Typ:] Name".

Dies entspricht der Symbol-ID des globalen Attributs "Ressource".


Android: labelFor

public static final int labelFor

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

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

Dies kann auch ein Verweis auf eine Ressource (im Format "@ [package:] type: name") oder ein Themenattribut (im Format "? [Package:] [type:] name") sein, das einen Wert dieses Typs enthält .

Konstanter Wert: 16843718 (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 .

48
My God

Das labelFor ist ein Attribut für Eingabehilfen. Sie weisen dies einer Beschriftung zu, damit Benutzer, wenn sie in einem Formular auf ein EditText -Feld klicken, Android wissen, was sie lesen müssen (TalkBack für Benutzer mit eingeschränkter Sehkraft).

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

13
Jitender Dev

Android:id definiert die ID dieser Ansicht.

Android:labelFor verweist auf die ID einer anderen Ansicht.

2
Henry

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

(übrigens meiner meinung nach mit xml sucks - meine einzige xml datei ist manifest: D generiert von gradle)

@IdRes - Anmerkung zur 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 Status der Hierarchieansicht beizubehalten, wenn Activity.onSaveInstanceState (Bundle) verwendet wird. Vergessen Sie also nicht, sie festzulegen, wenn Sie Code erstellen (VIEW/WIDGET/LAYOUT usw.).

0
ceph3us