我正在开发一个可访问的Android应用程序,人们可以使用Explore by Touch和TalkBack辅助功能服务来使用我的应用程序。
这是我的Android XML代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/forename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:layout_marginLeft="15dip"
android:textSize="20sp"
android:text="@string/forenameText"
android:contentDescription="@null"/>
<EditText
android:id="@+id/EditTextForename"
android:layout_width="285dp"
android:layout_height="65dp"
android:layout_marginTop="10dip"
android:layout_marginLeft="15dip"
android:hint="@string/forenameHint"
android:inputType="textPersonName"
android:lines="1"
android:singleLine="true"
android:textSize="20sp" >
</EditText>
</LinearLayout>
的strings.xml
<string name="forenameText">Forename</string>
<string name="forenameHint">Enter your forename here</string>
TextView显示标题“Forename”,EditText允许我在表单字段中输入一些细节。我遇到的问题是,当我 通过使用触摸浏览将我的手指拖过屏幕,TalkBack拾取TextView的标题并将其大声宣布为“Forename”。我希望TextView只显示文本而不提供任何声音反馈。
我已经将contentDescription设置为@null,正如您从上面的代码中看到的那样,但是当我的手指位于上面时,TalkBack仍会宣布“Forename” TextView的。
我也尝试在我的Java类中设置contentDescription:
TextView forename=(TextView)findViewById(R.id.forename);
forename.setContentDescription("");
但是,我仍然遇到同样的问题。有没有其他方法可以将contentDescription设置为null / empty并阻止TalkBack大声宣布它?
Java代码:
public class MainActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View forename = findViewById(R.id.forename);
forename.setAccessibilityDelegate(new AccessibilityDelegate() {
public boolean performAccessibilityAction (View host, int action, Bundle args){
return true;
}
});
}
}
答案 0 :(得分:19)
为了更好的向后兼容性:
ViewCompat.setImportantForAccessibility(
decorativeTextView,
ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
答案 1 :(得分:15)
自API 16起,Android引入了以下内容:
android:importantForAccessibility="no"
或
setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO)
这允许开发人员为某些视图一起禁用对讲。
http://developer.android.com/reference/android/view/View.html
答案 2 :(得分:12)
我今天尝试做同样的事情,并且能够像'empty'
一样设置TextView
contentDescription(使用不间断的空格):
decorativeTextView.setContentDescription("\u00A0");
现在TalkBack
没有为TextView
说明任何内容。
但我同意Nick的意见,即在您的情况下将标签保留为可读,因为提示仅针对空EditTexts
读取。
答案 3 :(得分:2)
我有类似的问题。我最终使用setAccessibilityDelegate
方法并覆盖View.AccessibilityDelegate's
performAccessibilityAction
方法解决了这个问题。
试试这个:
View forename = findViewById(R.id.forename);
forename.setAccessibilityDelegate(new AccessibilityDelegate() {
public boolean performAccessibilityAction (View host, int action, Bundle args){
return true;
}
});
答案 4 :(得分:2)
为什么你不希望TextView说“forename”?它被用作EditText的标签。一旦用户输入了一些文本,就不会再说出“在这里输入你的名字”的提示 - 据我所知 - 所以TextView为用户提供了EditText的一些上下文。
同样,“editbox”的发布为用户提供了EditText控件的作用。虽然“表单字段”可能更好,但它与其他应用程序和操作系统中的行为不同。
答案 5 :(得分:0)
我遇到了同样的问题,唯一对我有用的是android:contentDescription=" "
(空格)。