我写了一个简单的布局,它有一个EditText
,但它显示以下警告消息:
“没有标签视图指向此文本字段”</p>
在搜索时我发现了这一点,它解决了该警告消息,但属性android:id
和android:labelFor
. 任何澄清?
我写了一个简单的布局,它有一个EditText
,但它显示以下警告消息:
“没有标签视图指向此文本字段”</p>
在搜索时我发现了这一点,它解决了该警告消息,但属性android:id
和android:labelFor
. 任何澄清?
机器人:身份证
为此视图提供标识符名称,以便稍后使用
View.findViewById()
或检索它Activity.findViewById()
。这必须是资源引用;通常,您使用@+ 语法设置它以创建新的 ID 资源。例如: android:id="@+id/my_id" 允许您稍后使用findViewById(R.id.my_id)
.必须是对另一个资源的引用,形式
"@[+][package:]type:name"
为“?[package:][type:]name”形式的主题属性。这对应于全局属性资源符号 id。
机器人:标签为
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>
这labelFor
是可访问性选项的属性。您将其分配给一个标签,以便如果在表单上,用户单击一个EditText
字段,android 可以知道要向用户阅读什么内容(低视力用户的 TalkBack)。
id
为该视图提供标识符名称,以便稍后使用或View.findViewById()
检索它Activity.findViewById()
。
android:id
定义此视图的 ID。
android:labelFor
引用另一个视图的 ID。
机器人:标签为
使用此属性来指示一个视图应该充当另一个视图的内容标签。
<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 辅助功能 - 如何提供内容标签
如果您不将 xml 文件用于应用程序,除了所有答案之外,这是一个简要说明什么是服务 VIEW ID:
(顺便说一句,我认为使用 xml 很糟糕 - 我唯一的 xml 文件是清单:D 由 gradle 生成)
@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);
附言。当使用 Activity.onSaveInstanceState(Bundle) 时,ID 是保留层次结构视图状态的必要条件 - 因此,如果您在代码中创建(VIEW / WIDGET / LAYOUT 等),请不要忘记设置它。
android:id
只需使用视图 ID(以编程方式)访问视图。
android:labelFor
有时会与 lint 警告一起弹出:
缺少可访问性标签:提供一个带有引用此视图的“android:labelFor”的视图或提供一个“android:hint”
因此,例如:如果您有一个EditText
不能描述自身的内容,Android 会想知道您是否有一些标题或文本 ( TextView
) 可能描述了 EditText 的用途。因此,引用 idTextView
基本上可以让您了解EditText
在可访问性模式下将其文本放入其中的内容。
请参阅: https ://developer.android.com/guide/topics/ui/accessibility/principles#editable