我写了一个简单的布局,其中有EditText
,但它显示以下警告信息:
“没有标签视图指向此文本字段”
搜索时我发现this并解决了该警告信息,
但两个属性android:id
和android:labelFor
之间没有区别。有任何澄清吗?
答案 0 :(得分:47)
<强>机器人:ID 强>
为此视图提供标识符名称,以便稍后检索它
View.findViewById()
或Activity.findViewById()
。这必须是一个 资源参考;通常你使用@ +语法来设置它 创建新的ID资源。例如:android:id =&#34; @ + id / my_id&#34;哪一个 允许您稍后使用findViewById(R.id.my_id)
检索视图。必须是表单中对其他资源的引用
"@[+][package:]type:name"
或表单中的主题属性 &#34; [包:] [类型:]。名&#34;这对应于全局属性资源符号id。
<强>机器人:labelFor 强>
public static final int labelFor
指定此视图用作其标签的视图的ID 可达性目的。例如,在EditText之前的TextView UI通常指定EditText中包含的信息。 因此,TextView是EditText的标签。
必须是整数值,例如&#34; 100&#34;。
这也可能是对资源的引用(在表单中) &#34; @ [package:] type:name&#34;)或theme属性(在表单中 &#34;?[package:] [type:] name&#34;)包含此类型的值。
常数值: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>
答案 1 :(得分:12)
labelFor
是辅助功能选项的属性。您将其分配给标签,以便在表单上,用户单击EditText
字段时,android可以知道要向用户阅读的内容(针对低视力用户的TalkBack)。
id
为此视图提供标识符名称,以便稍后使用View.findViewById()
或Activity.findViewById()
进行检索。
答案 2 :(得分:2)
android:id
定义此视图的ID。
android:labelFor
引用另一个视图的ID。
答案 3 :(得分:1)
如果应用的用户界面已经为 可编辑项,在标签
android:labelFor
上定义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>
有关更多详细信息:Android Accessibility - How to provide content labels
答案 4 :(得分:0)
除了所有答案之外,如果您不对应用程序使用xml文件,这只是对服务VIEW ID的简要说明:
(在我看来使用xml糟透了 - 我唯一的xml文件是显示:由gradle生成的D)
@IdRes - 资源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。当使用Activity.onSaveInstanceState(Bundle)时,ID必须保留层次结构视图的状态 - 因此,如果您在代码中创建(VIEW / WIDGET / LAYOUT等),请不要忘记设置它。
答案 5 :(得分:0)
android:id
只是用于(以编程方式)访问视图的视图 ID。
android:labelFor
有时会与 lint 警告一起弹出:
缺少可访问性标签:提供带有 'android:labelFor' 引用此视图或提供 '安卓:提示'
因此,例如:如果您有一个不描述自身的 EditText
,Android 想知道您是否可能有一些标题或文本 (TextView
) 可以描述 EditText 的用途。
因此,引用 TextView
的 id 基本上可以让您了解在无障碍模式下将什么内容放入 EditText
及其文本中。
见: https://developer.android.com/guide/topics/ui/accessibility/principles#editable