Android - 防止TalkBack大声宣布TextView标题

Ale*_*lex 11 android accessibility textview talkback

我正在开发一个可访问的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>
Run Code Online (Sandbox Code Playgroud)

strings.xml中

<string name="forenameText">Forename</string>
<string name="forenameHint">Enter your forename here</string>
Run Code Online (Sandbox Code Playgroud)

TextView显示标题"Forename",EditText允许我在表单字段中输入一些细节.我遇到的问题是,当我通过触摸浏览将手指拖过屏幕时,TalkBack会选择TextView的标题并将其大声宣布为"Forename".我希望TextView只显示文本而不提供任何声音反馈.

我已经将contentDescription设置为@null,正如您从上面的代码中看到的那样,但当我的手指位于TextView上时,TalkBack仍会宣布"Forename".

我也尝试在我的Java类中设置contentDescription:

TextView forename=(TextView)findViewById(R.id.forename);
forename.setContentDescription("");
Run Code Online (Sandbox Code Playgroud)

但是,我仍然遇到同样的问题.有没有其他方法将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;
          }
        });
    }

}
Run Code Online (Sandbox Code Playgroud)

小智 19

为了更好的向后兼容性:

ViewCompat.setImportantForAccessibility(
        decorativeTextView,
        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 16

自API 16起,Android引入了以下内容:

android:importantForAccessibility="no"
Run Code Online (Sandbox Code Playgroud)

要么

setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO)
Run Code Online (Sandbox Code Playgroud)

这允许开发人员为某些视图一起禁用对讲.

http://developer.android.com/reference/android/view/View.html

  • 对于修订版22,它现在位于v4支持库中.http://developer.android.com/tools/support-library/index.html (3认同)

小智 12

我今天试图做同样的事情,并且能够像这样设置'empty'contentDescription TextView(使用不间断的空格):

decorativeTextView.setContentDescription("\u00A0"); 
Run Code Online (Sandbox Code Playgroud)

现在TalkBack没有说什么TextView.

但我同意尼克关于将标签留在你的情况下可读的原因,因为提示只是空的EditTexts.