web-dev-qa-db-fra.com

Différence entre Android: id et Android: labelFor?

J'ai écrit une mise en page simple qui a un EditText, mais elle affiche le message d'avertissement suivant:

"Aucune vue d'étiquette ne pointe vers ce champ de texte"

Lors de la recherche, j'ai trouvé this et il a résolu ce message d'avertissement, mais n'a pas obtenu de différence entre les deux attributs Android:id et Android:labelFor. Une clarification?

37
CoDe

Android: id

Fournissez un nom d'identifiant pour cette vue, pour la récupérer ultérieurement avec View.findViewById() ou Activity.findViewById(). Cela doit être une référence de ressource; généralement, vous définissez cela à l'aide de la syntaxe @ + pour créer une nouvelle ressource ID. Par exemple: Android: id = "@ + id/my_id" qui vous permet de récupérer plus tard la vue avec findViewById(R.id.my_id).

Doit être une référence à une autre ressource, sous la forme "@[+][package:]type:name" ou à un attribut de thème sous la forme "? [package:] [type:] nom".

Cela correspond à l'ID de symbole de ressource d'attribut global.


Android: labelFor

public static final int labelFor

Spécifie l'ID d'une vue pour laquelle cette vue sert d'étiquette à des fins d'accessibilité. Par exemple, un TextView avant un EditText dans l'interface utilisateur spécifie généralement les informations contenues dans le EditText. Par conséquent, le TextView est une étiquette pour le EditText.

Doit être une valeur entière, telle que "100".

Il peut également s'agir d'une référence à une ressource (sous la forme "@ [package:] type: nom") ou à un attribut de thème (sous la forme "? [Package:] [type:] nom") contenant une valeur de ce type .

Valeur constante: 16843718 (0x010103c6)

MISE À JOUR:

Par exemple -

 <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>

Référence: Android: id et Android: labelFor .

48
My God

labelFor est un attribut pour les options d'accessibilité. Vous affectez cela à une étiquette de sorte que si, sur un formulaire, l'utilisateur clique sur un champ EditText, Android peut savoir quoi lire (TalkBack pour les utilisateurs malvoyants) à l'utilisateur.

id Fournissez un nom d'identifiant pour cette vue, pour le récupérer ultérieurement avec View.findViewById() ou Activity.findViewById().

13
Jitender Dev

Android:id définit l'ID de cette vue.

Android:labelFor fait référence à l'ID d'une autre vue.

2
Henry

en plus de toutes les réponses si vous n'utilisez pas de fichiers xml pour les applications, ceci est une brève explication à quoi sert l'ID VIEW:

(à mon avis, utiliser xml suce - mon seul fichier xml est manifeste: D généré par gradle)

@IdRes - annotation pour l'ID de ressource

/** 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. L'ID est obligatoire pour conserver l'état de la vue de la hiérarchie lorsque Activity.onSaveInstanceState (Bundle) est utilisé - donc si vous créez dans le code (VIEW/WIDGET/LAYOUT etc.), n'oubliez pas de le définir.

0
ceph3us