2

"MultiAutoCompleteTextView" から拡張されたカスタム ビューがあります。ユーザーが CustomTextView への入力を開始すると、ポップアップに推奨値が表示されます。これらの値のいずれかを選択すると、選択した値が CustomTextView に取り込まれます。

選択できる値には、ID と名前があります。デフォルトでは、ユーザーがリストから値を選択し、CustomTextView にその選択された値が入力されると、TalkBack は選択されたアイテムの ID を奇妙な方法で読み上げます。

それは読む

"(単語全体としての itemID) は、syn (個々の文字としての itemId) のカンマ スペースを置き換えます"

たとえば、idがappleの場合、読み取ります

"apple は syn アップル コンマ スペースを置き換えます"

IDではなく名前だけ読み上げてほしいです。

アクセシビリティ用のカスタム ビューを追加するためのアクセシビリティ ドキュメントを読む ( http://developer.android.com/guide/topics/ui/accessibility/apps.html#custom-views ) さまざまな API を上書きしてイベント テキストを設定しようとしましたが、しかし、イベントテキストに対して何かを行うとすぐに、何も読み上げられません。

API 15以降のみをサポートする必要があるため、CustomTextViewにコードを追加しました

public void onPopulateAccessibilityEvent(AccessibilityEvent event){
    super.onPopulateAccessibilityEvent(event);
    System.out.println("onPopulateAccessibilityEvent \n s = " + s 
                        + "\n event text = " + event.getText());

    CharSequence c = "Test";
    event.getText().clear();
    event.getText().add(c);

    System.out.println("event text after setting = " + event.getText());
}

デバッグ システム アウトで、イベント テキストが ID から「Test」に更新されていることがわかります。

onPopulateAccessibilityEvent
s = Jo Blogs
event text = [UID1234, ]
event text after setting = [Test]

したがって、文字列「Test」が読み上げられない理由がわかりませんか? 何か案は?

注: 次のコードを追加すると、CustomTextView に触れたときに "Touched on CustomTextView" が正しく読み上げられます。ただし、このメソッドを上書きしても、提案からアイテムが最初に選択され、CustomTextView が設定されたときとの違いはありません。

@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info){
    super.onInitializeAccessibilityNodeInfo(info);
    info.setText("Touched on CustomTextView");
}
4

1 に答える 1

0
With the following accessibility methods overwritten this now seems to be working

@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info){
    super.onInitializeAccessibilityNodeInfo(info);

    String s = getAccessibilityUsernameString();

    if (s != null && null != getAccessibilityUserNames()) {
        info.setText(s);
    }
}


@Override
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
    super.onPopulateAccessibilityEvent(event);

    String s = getAccessibilityUsernameString();

    if (s != null) {
        event.getText().clear();
        event.getText().add(s);
    }
}   

where "getAccessibilityUserNames()" gets a string containing the names of the objects selected and "getAccessibilityUsernameString" returns a string "Selected items are %1$s"
于 2016-08-25T16:29:45.113 に答える