不幸的是,android:hint 总是会覆盖 android:contentDescription。您可以创建仅用于设置 android:labelFor 的 TextView,但根据我的经验,TalkBack 将同时读取提示和 labelFor。
添加仅用于为 TalkBack 标记 EditText 的 TextView 的正确方法:
<TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@string/yourDescription"
android:labelFor="@+id/editText" />
<EditText android:id="@+id/editText"/>
因此,其中一种解决方案是您可以检查 TalkBack 是否已打开并以编程方式更改提示。您可以通过以下方式检查 TalkBack 是否已开启:
if(context.isScreenReaderOn){
...
}
然后在 Kotlin 中创建一个内联函数,例如:
fun Context.isScreenReaderOn():Boolean{
val am = getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager
if (am != null && am.isEnabled) {
val serviceInfoList =
am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN)
if (!serviceInfoList.isEmpty())
return true
}
return false}