Android的 - 防止从话语提示大声宣布TextView的标题(Android - preven

2019-08-18 08:02发布

我正在开发一个可访问的Android应用程序,人们将使用触摸和对讲无障碍服务研究是否可使用我的应用程序。

这是我的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中显示的标题是“用的名字”和的EditText让我在表单字段中输入一些细节。 我的问题是,当我拖我的手指在屏幕上使用触摸浏览,话语提示拿起TextView的称号,并大声宣布它为“用的名字”。 我想TextView的只显示文本,不提供任何声音反馈。

我已contentDescription到@null,你可以从上面的代码中看到,但依然话语提示宣布“用的名字”时,我的手指位于在TextView的。

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

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

不过,我仍然得到了同样的问题。 是否有任何其他方式来设置contentDescription为空/空和防止从话语提示大声宣布呢?

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;
          }
        });
    }

}

Answer 1:

我试图做今天一样,并能设置一个'empty' contentDescription上TextView像这样(使用非中断空格):

decorativeTextView.setContentDescription("\u00A0"); 

现在TalkBack不说的任何东西TextView

但我同意尼克要离开标签在你的情况下可读的,因为提示是只读空EditTexts



Answer 2:

为了更好的向后兼容性:

ViewCompat.setImportantForAccessibility(
        decorativeTextView,
        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);


Answer 3:

由于API 16,Android的介绍如下:

android:importantForAccessibility="no"

要么

setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO)

它允许开发者一起禁用对讲某些看法。

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



Answer 4:

为什么你不希望TextView的讲话“用的名字”? 它被用作一个的EditText标签。 一旦用户输入一些文字提示“请在此输入你用的名字”将不再说话 - 因为据我所知 - 这样的TextView给用户的EditText上一些背景。

类似地,“编辑框”的公布为用户提供的EditText控制的作用。 虽然“表单字段”可能更好它不会是相同的行为在其他应用程序和操作系统。



Answer 5:

我有一个类似的问题。 我最终通过解决它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;
  }
});


Answer 6:

我有同样的问题,只是为我工作的事情是android:contentDescription=" "空格)。



文章来源: Android - prevent TalkBack from announcing TextView title aloud