¿Diferencia entre android: id y android: labelFor?

5 minutos de lectura

Avatar de usuario de CoDe
Código

Escribí un diseño simple que tiene un EditTextpero muestra el siguiente mensaje de advertencia:

“Ninguna vista de etiqueta apunta a este campo de texto”

Mientras buscaba, encontré esto y resolvió ese mensaje de advertencia, pero no obtuve diferencia entre ambos atributos android:id y android:labelFor. ¿Alguna aclaración?

  • este podría ser útil

    – Nir Alfasi

    14 de julio de 2014 a las 7:11

  • Posible duplicado del mensaje de advertencia “Ninguna vista de etiqueta apunta a este campo de texto”

    – SÍ

    29 de noviembre de 2015 a las 8:24

Avatar de usuario de mi Dios
Dios mío

androide: identificación

Proporcione un nombre de identificador para esta vista, para luego recuperarlo con
View.findViewById() o Activity.findViewById(). Esta debe ser una referencia de recurso; por lo general, configura esto usando la sintaxis @+ para crear nuevos recursos de ID. Por ejemplo: android:id=”@+id/my_id” que le permite recuperar la vista más tarde con findViewById(R.id.my_id).

Debe ser una referencia a otro recurso, en la forma
"@[+][package:]type:name" o a un atributo de tema en la forma “?[package:][type:]nombre”.

Esto corresponde al id de símbolo de recurso de atributo global.


android:etiquetaPara

int final estático público etiquetaPara

Especifica el ID de una vista para la que esta vista sirve como etiqueta con fines de accesibilidad. Por ejemplo, un TextView antes de EditText en la interfaz de usuario generalmente especifica qué información está contenida en EditText. Por lo tanto, TextView es una etiqueta para EditText.

Debe ser un valor entero, como “100”.

Esto también puede ser una referencia a un recurso (en la forma “@[package:]type:name”) o atributo del tema (en la forma “?[package:][type:]name”) que contiene un valor de este tipo.

Valor constante: 16843718 (0x010103c6)

ACTUALIZAR:

Por ejemplo –

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

Referencia: androide: identificación y android:etiquetaPara.

  • en mi caso, está dando una advertencia para EditText Field y cuando actualizo el atributo labelFor en EditText, apareció una advertencia. Aquí actualiza el mismo atributo para TextView … Todavía no tengo claro en qué referencia se debe usar.

    – Código

    14 de julio de 2014 a las 9:06


  • ¿Cuál es la ventaja de establecer labelfor?

    – Psíquico

    2 de diciembre de 2014 a las 19:04

  • Propósitos de accesibilidad de @Psypher: sin eso, un lector de pantalla tiene problemas para saber cuál es la etiqueta de un campo de entrada, y los invidentes no pueden “ver” la etiqueta que está al lado de un campo.

    – Blaisorblade

    20/09/2016 a las 18:55

  • Sería bueno explicar la razón de los múltiples +s, al leer los documentos, parece que no deberían estar allí. Ver comentarios a continuación: stackoverflow.com/questions/24731137/…

    – Blaisorblade

    20/09/2016 a las 18:56


  • Para aquellos que pueden no tener la reputación de ver las respuestas eliminadas, encontré este elogio de una respuesta eliminada muy útil: si los elementos XML se reordenan, omitir el “+” fallará. (Y a Android Studio le gusta reordenar el orden cuando no importa). Agregarlo varias veces no hace daño, y omitirlo es una fórmula para futuros dolores de cabeza.

    – BlueMonkMN

    19 de diciembre de 2017 a las 1:03

android:id define el ID de esta vista.

android:labelFor hace referencia al ID de otra vista.

android:id Simplemente el ID de la vista para acceder (mediante programación) a la vista.

android:labelFor aparece a veces en combinación con la advertencia de pelusa:

Falta la etiqueta de accesibilidad: proporcione una vista con un ‘android:labelFor’ que haga referencia a esta vista o proporcione un ‘android:hint’

Entonces, por ejemplo: Si tienes un EditText que no se describe a sí mismo, Android se pregunta si podría tener algún título o texto (TextView) que podría describir para qué se usa EditText. Entonces, haciendo referencia a la identificación del TextView básicamente le da una idea de qué poner en el EditText con su texto en el modo de accesibilidad.

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

Además de todas las respuestas, si no usa archivos xml para aplicaciones, esta es una breve explicación para qué sirve VIEW ID:

(por cierto, en mi opinión, usar xml apesta: mi único archivo xml es manifiesto: D generado por gradle)

@IdRes: anotación para la identificación del recurso

/** 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);

PD. La identificación es obligatoria para preservar el estado de la vista de jerarquía cuando se usa Activity.onSaveInstanceState (Bundle), por lo que si crea en el código (VIEW / WIDGET / LAYOUT, etc.) no olvide configurarlo.

Avatar de usuario de Benny
benny

android:etiquetaPara

Use este atributo para indicar que una vista debe actuar como una etiqueta de contenido para otra vista.

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

Para más detalles: Accesibilidad de Android: cómo proporcionar etiquetas de contenido

¿Ha sido útil esta solución?