2014-07-14 23 views
24

scrivo un layout semplice che hanno e EditText, ma mostrando seguente messaggio di avviso,Differenza tra android: id e android: labelFor?

“No label viste puntare a questo campo di testo”

Durante la ricerca ho ottenuto this e risolvere che messaggio di avvertimento pure. Ma non ha avuto differenza tra entrambi gli attributi android:id e android:labelFor. Qualsiasi chiarimento!

+1

[* questo *] (http://thecodeiscompiling.blogspot.com/2013/12/android-labelfor-waning-fix.html) potrebbe essere utile – alfasin

+0

Possibile duplicato di [Significato di "Nessuna visualizzazione di etichette punta a questo campo di testo "messaggio di avviso" (http://stackoverflow.com/questions/16896082/meaning-of-no-label-views-point-to-this-text-field-warning-message) – YEH

risposta

32

Android: id

Fornitura di un nome identificativo per questa vista, per recuperare successivamente con View.findViewById() o Activity.findViewById(). Questo deve essere un riferimento risorsa ; in genere lo imposti utilizzando la sintassi @ + su crea una nuova risorsa ID. Ad esempio: android: id = "@ + id/my_id" che consente di recuperare in seguito la vista con findViewById(R.id.my_id).

deve essere un riferimento a un'altra risorsa, sotto forma "@[+][package:]type:name" o per un attributo tema nella forma "[pacchetto:]? [Tipo:] nome".

Corrisponde all'ID simbolo risorsa globale attributo.


android: labelFor

pubblico static finale int labelFor

Specifica l'id di una vista per cui questa vista serve come etichetta per accessibilità scopi. Ad esempio, una TextView prima di EditText in l'UI di solito specifica quali informazioni sono contenute in EditText. Quindi, TextView è un'etichetta per EditText.

Deve essere un valore intero, ad esempio "100".

Questo può anche essere un riferimento a una risorsa (in forma "@ [pacchetto:] tipo: nome") o l'attributo tema (in forma "? [Pacchetto:] [Tipo:] nome") contenente un valore di questo tipo.

Costante Valore: 16.843.718 (0x010103c6)

UPDATE:

Per esempio -

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

Riferimento: android:id e android:labelFor.

+0

nel mio caso sta dando avviso per EditText Field e quando aggiorno labelFor attributo in EditText, l'avviso è andato. Qui si aggiorna lo stesso attributo per TextView ... Non sono ancora chiaro in quale riferimento dovrebbe essere usato. – CoDe

+8

Qual è il vantaggio di impostare labelfor? – Psypher

+2

@Psypher Scopo dell'accessibilità, senza che uno screen reader abbia difficoltà a sapere quale sia l'etichetta per un campo di input, e il non vedente non può "vedere" l'etichetta accanto a un campo. – Blaisorblade

1

android:id definisce l'ID di questa vista.

android:labelFor fa riferimento all'ID di un'altra vista.

9

Il labelFor è un attributo per le opzioni di accessibilità. Assegnare questo a un'etichetta in modo che se, su un modulo, l'utente fa clic su un campo EditText, Android può sapere cosa leggere (TalkBack per gli utenti ipovedenti) all'utente.

id Fornire un nome identificativo per questa vista, per recuperarlo in seguito con View.findViewById() o Activity.findViewById().

+0

così è per abbinare il suo supporto campo etichetta, come Nome (etichetta) rispetto al suo campo di input. – CoDe

0

in aggiunta a tutte le risposte se u non utilizzare file XML per le applicazioni si tratta di una breve spiegazione per quello che serve ID VISTA:

(btw, a mio parere utilizzando XML schifo - il mio unico file XML viene manifesti: d generato da Gradle)

@IdRes - annotazione per la risorsa 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. L'ID è obbligatorio per preservare lo stato della vista della gerarchia quando viene utilizzato Activity.onSaveInstanceState (Bundle), quindi se si crea nel codice (VIEW/WIDGET/LAYOUT ecc.) Non dimenticare di impostarlo.

Problemi correlati