如何通过 TalkBack 访问 google.android.gms.common.SignInButton

How to make google.android.gms.common.SignInButton accessible via TalkBack

我一直在努力让我们的应用程序更易于用户使用它与 TalkBack。我 运行 遇到的一个问题是 Google SignInButton 通过 TalkBack 宣布自己为 "Button"(甚至 "unlabeled")。

我已经尝试在 xml 和代码中设置它的 contentDescription,就像应用程序中的其他视图一样,但它并没有改变这种行为。

任何关于如何让这个视图将自己宣布为 "Google Button" 的想法都将不胜感激!

如果有帮助,这就是 xml 中的视图:

<com.google.android.gms.common.SignInButton
    android:id="@+id/google_sign_in_button"
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_marginEnd="10dp"
    android:layout_marginTop="0dp"
    android:layout_weight="1" />

谢谢!

您是否尝试添加内容描述?

<com.google.android.gms.common.SignInButton
    android:id="@+id/google_sign_in_button"
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_marginEnd="10dp"
    android:layout_marginTop="0dp"
    android:contentDescription="@string/some_localized_string"
    android:layout_weight="1" />

在调试过程中,我发现 SignInButton 有一个子元素。在此子元素上设置 contentDescription 从 TalkBack 获得了正确的行为。这是代码:

SignInButton signInButton = (SignInButton) view.findViewById(R.id.google_sign_in_button);
signInButton.setSize(SignInButton.SIZE_ICON_ONLY);
signInButton.setScopes(mGso.getScopeArray());
signInButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        googleSignIn();
    }
});
if (signInButton.getChildCount() > 0) {
    View signInButtonInnerContent = signInButton.getChildAt(0);
    signInButtonInnerContent.setContentDescription(getString(R.string.google_button_description));
}