使用TextInputLayout

时间:2015-06-11 01:19:47

标签: android accessibility

我使用Android.support提供的新TextInputLayout来执行浮动标签。但它会失败Espresso辅助功能检查,因为" View缺少屏幕阅读器所需的可说文本"。

查看它并找出当父进行addView()时TextInputLayout将使null提示无效。这基本上是它如何浮动标签(设置标签,使提示无效)。任何带有空提示的EditText都将无法通过辅助功能检查。

任何人都知道如何解决此问题?这真让我疯狂..

非常感谢!!!!

4 个答案:

答案 0 :(得分:5)

一般来说,提示对于可访问性并不是很好。输入文本时它们会消失。尝试使用" LabelFor"代替。如果您不想要可见标签,可以将标签设置为不显示。

此应用程序将为您提供有关如何使文本框可访问的提示。

https://play.google.com/store/apps/details?id=com.dequesystems.accessibility101

答案 1 :(得分:4)

使TextInputLayout可访问的一个好方法是使用" LabelFor"正如ChrisCM所建议的那样,但您不必添加隐形标签视图来执行此操作:只需放置labelFor或您的Textinputlayout并将其指向您的{{1 }}

示例

EditText

通过这种方式,您可以获得完全相同的视觉行为并进行“#Espresso辅助功能检查”。和对讲高兴:)

(为了使TextInputLayout完全可访问,我还在TextInputLayout元素上添加了<android.support.design.widget.TextInputLayout android:labelFor="@+id/username" android:contentDescription="@string/username_hint" android:accessibilityLiveRegion="polite"> <edittext android:id="@+id/username" android:hint="@string/username_hint" …/> </android.support.design.widget.TextInputLayout> ,以便在弹出错误时触发对讲

非常感谢这篇帮助很多的帖子this blog post

答案 2 :(得分:1)

或者,如果这是误报,则您可以按照here

的说明忽略支票
val validator: AccessibilityValidator = AccessibilityChecks.enable().apply {
setSuppressingResultMatcher(
        allOf(
                matchesCheckNames(`is`("TouchTargetSizeViewCheck")),
                matchesViews(withId(R.id.my_overflow))
        )
)}

当我们启用可访问性检查测试时,将调用以下规则:

  • TouchTargetSizeViewCheck目标高度或目标宽度小于48 除非检测到触摸代表,否则将标记dp。
  • TextContrastViewCheck检查文本颜色和背景以及因素 大文本,并计算对比度:-常规为4.5 文字,大文字为3。
  • DuplicateSpeakableTextViewHierarchy检查是否 层次结构中的两个视图具有相同的可说文本,可能是 如果至少其中之一是可点击的,则会使用户感到困惑。
  • SpeakableTextPresentViewCheck如果视图可聚焦,则检查 是否存在有效的可说文本,如果视图为 缺少屏幕阅读器所需的可说文本。
  • EditableContentDescViewCheck如果Editable TextView具有以下内容,则引发错误 contentDescription。
  • ClickableSpanViewCheck检查ClickableSpan是否 无法访问。不能在以下位置独立选择单个范围 单个TextView,并且可访问性服务无法调用 ClickableSpan#onClick。
  • RedundantContentDescViewCheck可访问性 服务知道该视图的类型,并且可以将该信息用作 需要。例如,如果内容描述 有一个多余的词,例如“ button”。
  • DuplicateClickableBoundsViewCheck如果Clickable视图,则引发错误 与另一个可点击视图(可能是后代)具有相同的边界。 有时有标记为可点击的容器,但没有 处理所有点击事件。

答案 3 :(得分:0)

您可以使TextView具有

android:text="My Announcement For Edit Text"
android:labelFor="@id/my_edit_text".

Visibility = gonevisibility = invisible可以做到,因此不会宣布此标签。同样,如果将高度和宽度设置为0dp,则不会宣布。而是使用以下方法将视图限制为不在屏幕上:

app:layout_constraintEnd_toStartOf="parent"

因此您的文本视图将如下所示:

<TextView
        android:id="@+id/edit_text_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:labelFor="@+id/my_edit_text"
        android:text="Label For My Edit Text"
        app:layout_constraintEnd_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />