当前位置: 首页 > 知识库问答 >
问题:

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

房新翰
2023-03-14

我正在开发一个可访问的android应用程序,人们可以通过触摸和对讲访问服务来使用我的应用程序。

这是我的AndroidXML代码:

<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正如你从上面的代码中看到的那样,但是当我的手指位于 TextView 上时,TalkBack 仍然会宣布“Forename”。

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

TextView forename=(TextView)findViewById(R.id.forename);
forename.setContentDescription("");

但是,我仍然遇到同样的问题。有没有其他方法可以将contentDescription设置为空/空并阻止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;
          }
        });
    }

}

共有3个答案

郎献
2023-03-14

我今天试图做同样的事情,并且能够在TextView上设置一个“空”内容描述,如下所示(使用不间断的空格):

decorativeTextView.setContentDescription("\u00A0"); 

现在TalkBack没有为那个TextView说什么。

但我同意Nick关于在您的情况下保持标签可读的观点,因为提示仅对空的<code>编辑文本

邹普松
2023-03-14

为了更好的向后兼容性:

ViewCompat.setImportantForAccessibility(
        decorativeTextView,
        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
公羊宇定
2023-03-14

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

android:importantForAccessibility="no"

setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO)

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

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

 类似资料:
  • 我正在为Android TV实现一个屏幕,它有一个屏幕标题和一个按钮在左侧。以及自定义视图/行(可选/可单击)的列表,垂直排列在页面右侧。 当用户看到屏幕时,我们希望左边的按钮成为焦点。为此,我在片段的< code>onResume()中调用了< code > button . request focus()。 这打破了可访问性。启用对讲后,首先宣布的是按钮的标签。我想要的是先宣布标题,然后宣布按

  • 您如何让新启动的活动在Android TalkBack中宣布自己? 我能找到的所有文档都只提到视图,而不是活动,这些视图只有在触摸时才宣布自己。我需要的是,在更改“活动”时,使用一些语音文本来告诉用户他们在应用层次结构中的位置。现在,在每次活动更改时,TalkBack每次都只声明应用程序名称,这没有用。 我尝试过将 contentDescription 添加到活动布局 XML 中的根布局元素,但这

  • 问题内容: 所以我想补充superscipt /标到一个TextView,基本上是试图使一小部分显示为1 / 2。不知道我要去哪里错,而且我是Android的新手,因此感谢您的帮助。谢谢! 问题答案: 试试吧。简单而精确: 注意:您可能需要给文本视图一些高度,否则输出将被剪切。 或者,您可以尝试使用此方法,其中数字大小较小:

  • 本文向大家介绍PHP 宣布,包括了PHP 宣布的使用技巧和注意事项,需要的朋友参考一下 示例 declare 用于为代码块设置执行指令。 可以识别以下指令: ticks encoding strict_types 例如,将刻度设置为1: 要启用严格类型模式,该declare语句与strict_types声明一起使用:            

  • 我试图实现一些东西作为“竞赛条件”。这个竞赛条件必须遵循这些情况: 同时触发两个HTTP调用。 返回第一个成功完成的调用的响应。 处理最后一个呼叫。(这里最重要的是我不能丢弃最后一个呼叫,我确实需要处理它的结果:无论它的状态、成功或失败)。 此代码示例是我实现的解决方案中最接近的一个: 在这个例子中,我使用了Flux.first方法,它帮助我返回了第一个调用,但是它丢弃(取消)了第二个调用,这是一

  • 我正试图从各种类中生成清晰的文档,所有的JAX-RS都有注释,一些用java编写,一些用clojure编写。 我构建了一个maven项目,它只是依赖于包含服务类的war文件: 我无法生成任何服务文档。 当运行mvn发音:docs-X时,我看到我的类“注意到了”: [调试]注意到类 WEB-INF.classes.com.ws.scholar.resources.ClientResource in