android:id和android:labelFor之间的区别?

CoD*_*oDe 37 android xml-attribute editbox

我写了一个简单的布局,它有一个EditText,但它显示以下警告信息:

"没有标签视图指向此文本字段"

尽管搜索,我发现和它解决了警告信息,但并没有获得这两个属性之间的差异android:idandroid:labelFor.有任何澄清吗?

My *_*God 48

机器人:ID

为此视图提供标识符名称,以便稍后使用View.findViewById()或检索它 Activity.findViewById().这必须是资源参考; 通常使用@ +语法设置此项以创建新的ID资源.例如:android:id ="@ + id/my_id",它允许您稍后检索视图findViewById(R.id.my_id).

必须是对表单中的另一个资源的引用, "@[+][package:]type:name"或者是"?[package:] [type:] name"形式的主题属性.

这对应于全局属性资源符号id.


机器人:labelFor

public static final int labelFor

指定视图的id,此视图用作可访问性标签.例如,UI中EditText之前的TextView通常指定EditText中包含的信息.因此,TextView是EditText的标签.

必须是整数值,例如"100".

这也可能是对包含此类型值的资源(格式为"@ [package:] type:name")或主题属性(格式为"?[package:] [type:] name")的引用.

常数值:16843718(0x010103c6)

更新:

例如 -

 <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>
Run Code Online (Sandbox Code Playgroud)

参考:android:idandroid:labelFor.

  • 设置labelfor的优势是什么? (11认同)
  • @Psypher可访问性目的 - 没有它,屏幕阅读器无法知道输入字段的标签是什么,并且盲人不能"看到"标签紧挨着字段. (4认同)
  • 解释多个`+'的原因是很好的,从阅读文档听起来它们不应该存在.请参阅以下评论:http://stackoverflow.com/questions/24731137/difference-between-androidid-and-androidlabelfor#comment65480318_32918913 (2认同)

Jit*_*Dev 13

labelFor是辅助功能选项的属性.您将此分配给标签,以便在表单上,​​用户单击某个EditText字段时,android可以知道要向用户阅读的内容(针对低视力用户的TalkBack).

id供应的标识符名称这一观点,到后来与检索它View.findViewById()Activity.findViewById().