Difference between android:id and android:labelFor?

后端 未结 5 620
春和景丽
春和景丽 2020-12-25 10:37

I wrote a simple layout which has an EditText, but it\'s showing the following warning message:

“No label views point to this text field”

相关标签:
5条回答
  • 2020-12-25 11:07

    android:id defines the ID of this view.

    android:labelFor references the ID of another view.

    0 讨论(0)
  • 2020-12-25 11:09

    in addition to all answers if u don't use xml files for apps this is a brief explanation what for serves VIEW ID :

    (btw in my opinion using xml sucks - my only xml file is manifest :D generated by gradle)

    @IdRes - annotation for resource 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 is mandatory to preserve state of hierarchy view when Activity.onSaveInstanceState(Bundle) is used - so if u create in code (VIEW / WIDGET / LAYOUT etc.) don't forget to set it.

    0 讨论(0)
  • 2020-12-25 11:10

    android:labelFor

    Use this attribute to indicate that a View should act as a content label for another View.

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

    For more details: Android Accessibility - How to provide content labels

    0 讨论(0)
  • 2020-12-25 11:11

    The labelFor is an attribute for accessibility options. You assign this to a label so that if, on a form , user clicks a EditText field , android can know what to read (TalkBack for low vision users) to user.

    The id Supply an identifier name for this view, to later retrieve it with View.findViewById() or Activity.findViewById().

    0 讨论(0)
  • 2020-12-25 11:15

    android:id

    Supply an identifier name for this view, to later retrieve it with View.findViewById() or Activity.findViewById(). This must be a resource reference; typically you set this using the @+ syntax to create a new ID resources. For example: android:id="@+id/my_id" which allows you to later retrieve the view with findViewById(R.id.my_id).

    Must be a reference to another resource, in the form "@[+][package:]type:name" or to a theme attribute in the form "?[package:][type:]name".

    This corresponds to the global attribute resource symbol id.


    android:labelFor

    public static final int labelFor

    Specifies the id of a view for which this view serves as a label for accessibility purposes. For example, a TextView before an EditText in the UI usually specifies what infomation is contained in the EditText. Hence, the TextView is a label for the EditText.

    Must be an integer value, such as "100".

    This may also be a reference to a resource (in the form "@[package:]type:name") or theme attribute (in the form "?[package:][type:]name") containing a value of this type.

    Constant Value: 16843718 (0x010103c6)

    UPDATE:

    For example -

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

    Reference: android:id and android:labelFor.

    0 讨论(0)
提交回复
热议问题