44

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

“没有标签视图指向此文本字段”</p>

在搜索时我发现了这一点,它解决了该警告消息,但属性android:idandroid:labelFor. 任何澄清?

4

6 回答 6

56

机器人:身份证

为此视图提供标识符名称,以便稍后使用 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>

参考:android:idandroid:labelFor

于 2014-07-14T07:17:07.387 回答
15

labelFor是可访问性选项的属性。您将其分配给一个标签,以便如果在表单上,​​用户单击一个EditText字段,android 可以知道要向用户阅读什么内容(低视力用户的 TalkBack)。

id为该视图提供标识符名称,以便稍后使用或View.findViewById()检索它Activity.findViewById()

于 2014-07-14T07:15:17.497 回答
3

android:id定义此视图的 ID。

android:labelFor引用另一个视图的 ID。

于 2014-07-14T07:07:56.260 回答
0

机器人:标签为

使用此属性来指示一个视图应该充当另一个视图的内容标签。

<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 辅助功能 - 如何提供内容标签

于 2019-10-27T00:16:00.980 回答
0

如果您不将 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 等),请不要忘记设置它。

于 2015-11-28T13:34:10.363 回答
0

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

于 2021-07-22T14:43:44.180 回答