android:contentDescription="@null" 和 tools:ignore="ContentDescription" 有什么区别?使用android:importantForAccessibility="no"?

What is the difference between android:contentDescription="@null" and tools:ignore="ContentDescription"? Use android:importantForAccessibility="no"?

以这个 android 布局 XML 片段为例:

<ImageView
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:padding="10dp"
        app:srcCompat="@drawable/bitcoin"
        android:contentDescription="@null"
        android:importantForAccessibility="no"
        tools:ignore="ContentDescription" />

android:contentDescription="@null"tools:ignore="ContentDescription"?有什么区别

我知道它们都是用来表示某个非文本元素没有任何意义,仅用于装饰。使用一个比另一个有优势吗?我应该同时使用两者吗?是偏好,还是一个被认为比另一个更好、更新?

此外,我应该使用 android:importantForAccessibility="no" 还是同时使用所有三个 attributes/properties 太过分了?

What is the difference between android:contentDescription="@null" and tools:ignore="ContentDescription"?

android:contentDescription="@null"

  • 用于表示某个非文本元素没有任何意义,仅用于装饰。

工具:忽略="ContentDescription"

  • 用于图形元素,例如 ImageViewImageButton。如果您不设置它们各自的 android:contentDescription XML 属性,将显示一条 lint 警告消息。

    "Missing contentDescription attribute on image"

  • 要抑制此 lint 警告消息,则必须在 XML.

  • 中使用 tools:ignore="ContentDescription"

I know both of them are used to indicate that a certain non-textual element carries no meaning and is only meant for decoration. Is there an advantage of using one over the other, should I use both, is it preference, or is one considered better and newer than the other?

不是,它们在用法上彼此不同,例如

<ImageView 
    android:layout_width="200dp"
    android:layout_height="300dp"
    android:id="@+id/image_user_avatar"
    android:contentDescription="User avatar"
    tools:ignore="ContentDescription" />

当 运行使用 TalkBack 启动应用程序时,它会说 "User avatar"。

Should I use android:importantForAccessibility="no"?

如果您的应用仅支持设备 运行ning Android 4.1(API 级别 16)或更高版本,您可以设置这些元素' android:importantForAccessibility XML 属性为 "no" 而不是 android:contentDescription="@null.

更新

So basically tools:ignore="ContentDescription" is only for the compiler and android:contentDescription="@null" is for user user?

是的,是的。

Also, my 'minSdk' is 14 and my 'targetSdk' is 28. Can I still set both android:importantForAccessibility="no" and android:contentDescription="@null"?

是的,您可以同时设置它们,但是如果您 运行 SDK 低于 16 的设备上的应用程序,android:importantForAccessibility="no" 将被忽略。

Will android:contentDescription="@null" have the same effect as android:importantForAccessibility="no" for devices running Android 4.1 or higher?

它们略有不同。

android:contentDescription="@null":当用户在其上移动手指时,具有此属性的视图仍会突出显示,辅助功能服务会大声读出 "Button" 等虚拟文本

android:importantForAccessibility="no":具有此属性的视图已被应用程序禁用,因此当用户移动手指时它不会突出显示并被辅助功能服务忽略。