我有一个如下所示的EditText
<EditText
android:id="@+id/extUsername"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="Username field"
android:hint="Username" />
我希望TalkBack说&#34;用户名字段&#34;但它说&#34;用户名&#34;。它忽略了contentDescription。
请勿告诉我删除提示或contentDescription。我需要同时使用它们。
任何建议都将不胜感激。
答案 0 :(得分:8)
您要做的是使用LabelFor。 LabelFor允许可视标签与EditText框关联。如果您愿意,可以使视觉标签不可见,这样它就不会改变您的视觉布局。
提示的缺点是,在输入文本后它们会消失,这使得它们成为非常差的可访问性工具。如果您依赖于辅助功能信息的提示,则无法访问您的应用。
做这样的事情:
<TextView
android:text="@string/yourEditTextDescription"
android:labelFor="@+id/editTextField" />
<EditText android:id="@+id/editTextField"/>
答案 1 :(得分:0)
根据官方文档,您不应将var gulp = require('gulp'),
durandal = require('gulp-durandal'),
rimraf = require('rimraf');
gulp.task('clean', function (cb) {
rimraf('app/main-built.js', cb);
});
gulp.task('durandal', ['clean'], function () {
durandal({
baseDir: 'app',
main: 'main.js',
output: 'main-built.js',
almond: true,
minify: true
})
.pipe(gulp.dest('app'));
});
gulp.task('default', ['durandal']);
设置为任何值。相反,仅使用android:contentDescription
。
android:hint
您的<EditText
android:id="@+id/extUsername"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="Username" />
中的“字段”应该被删除,因为TalkBack会将其宣布为“用户名编辑框”
答案 2 :(得分:0)
不幸的是,android:hint将始终覆盖android:contentDescription。您可以创建TextView,仅用于设置android:labelFor,但根据我的经验,话语提示将同时读取hint和labelFor。
添加TextView的正确方法,该方法仅用于为TalkBack标记EditText:
<TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@string/yourDescription"
android:labelFor="@+id/editText" />
<EditText android:id="@+id/editText"/>
因此,解决方案之一是您可以检查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}
答案 3 :(得分:-1)
您应该使用覆盖TextView.getTextForAccessibility()方法扩展EditText类,以便通过以下方式获得预期的行为:
public CharSequence getTextForAccessibility() {
CharSequence text = getText();
if (TextUtils.isEmpty(text)) {
text = getContentDescription();
}
return text;
}
答案 4 :(得分:-2)
注意:对于EditText字段,提供android:hint属性而不是内容描述,以帮助用户了解文本字段为空时预期的内容。当字段填写时,TalkBack从内容描述中读取输入的内容以帮助用户,而不是提示文本。
提示 - &gt; android:提示
对于TalkBack - &gt;机器人:contentdescription
答案 5 :(得分:-4)
您需要将它添加到string.xml文件中:
<string name="description">your desc goes here</string>