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

Shi*_*lee 3 android attributes lint imageview android-layout

以这个 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" />
Run Code Online (Sandbox Code Playgroud)

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

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

另外,我android:importantForAccessibility="no"是否应该使用或正在使用所有三个属性/属性只是过度使用?

Nhấ*_*ang 8

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

android:contentDescription="@null"

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

工具:忽略=“内容描述”

  • 对于图形元素,例如ImageViewImageButton。如果您没有设置它们各自的android:contentDescriptionXML 属性,则会显示一条 lint 警告消息。

    "Missing contentDescription attribute on image"

  • 要取消此 lint 警告消息,您必须tools:ignore="ContentDescription"在 XML 中使用。

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

不,它们在用法方面彼此不同,例如

<ImageView 
    android:layout_width="200dp"
    android:layout_height="300dp"
    android:id="@+id/image_user_avatar"
    android:contentDescription="User avatar"
    tools:ignore="ContentDescription" />
Run Code Online (Sandbox Code Playgroud)

使用 TalkBack 运行应用程序时,它会说出“用户头像”。

我应该使用android:importantForAccessibility="no"吗?

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

更新

所以基本上 tools:ignore="ContentDescription" 仅用于编译器而 android:contentDescription="@null" 用于用户用户?

是的。

另外,我的 'minSdk' 是 14,我的 'targetSdk' 是 28。我还能同时设置 android:importantForAccessibility="no" 和 android:contentDescription="@null" 吗?

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

对于运行 Android 4.1 或更高版本的设备, android:contentDescription="@null" 是否与 android:importantForAccessibility="no" 具有相同的效果?

它们略有不同。

android:contentDescription="@null":当用户在其上移动手指时,具有此属性的视图仍会突出显示,并且辅助功能服务将大声朗读虚拟文本,例如“按钮”等。

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