16

長押しアクションハンドラーを持つビューがあります。コンテンツの説明を使用して、ビューがフォーカスを取得したときに Talkback が話すメッセージを設定します。

現在、フォーカスを取得した直後にコンテンツの説明が表示され、短い一時停止の後に次のように表示されます。

ダブルタップして起動、ダブルタップして長押し

このメッセージを次のように変更したい

ダブルタップで「アクション1」、ダブルタップ長押しで「アクション2」

そうする方法はありますか?

を調べてonPopulateAccessibilityEvent()、イベントを取得しTYPE_VIEW_ACCESSIBILITY_FOCUSEDましたが、目的のメッセージを変更できませんでした。

簡単なものがありませんか?

4

5 に答える 5

11

API 21 以降では、ビューの でカスタム アクションを設定することにより、アクション名をカスタマイズできますAccessibilityNodeInfo。これには 2 つの方法があります。1) デリゲート メソッドを設定しAccessibilityDelegateてオーバーライドするonInitializeAccessibilityNodeInfoか、2) ビューのクラスを拡張してオーバーライドしますonInitializeAccessibilityNodeInfo

いずれにしても、新しいAccessibilityActionを作成し、 AccessibilityNodeInfo.addActionを使用してノードに設定します。

デリゲートの使用を選択した場合は、次のようにクリック アクションのカスタム説明を設定します。

view.setAccessibilityDelegate(new AccessibilityDelegate() {
  @Override
  public void onInitializeAccessibilityNodeInfo(
      View v, AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(v, info);

    // A custom action description. For example, you could use "pause"
    // to have TalkBack speak "double-tap to pause."
    CharSequence description = getResources().getText(R.string.my_click_desc);
    AccessibilityAction customClick = new AccessibilityAction(
            AccessibilityAction.ACTION_CLICK, description);
    info.addAction(customClick);
  }
});

アプリケーションが 21 未満の API をターゲットにしている場合は、適切な*Compatサポート ライブラリ メソッドに置き換えてください。この機能はバックポートされていないため、21 未満の API ではカスタムの説明を取得できませんが、アプリケーション コードでの明示的なバージョン チェックを回避できます。

于 2016-09-14T00:53:52.913 に答える
0

すべてのフレーズを削除したい場合は、以下のコードを使用してください。「ダブルタップして」。

ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() {
        @Override
        public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
            super.onInitializeAccessibilityNodeInfo(host, info);
            info.addAction(AccessibilityNodeInfoCompat.ACTION_FOCUS);
        }
});

これは基本的に以下のコードを呼び出してrequestFocusおり、デフォルトのトークバック アナウンスは関連付けられていません。

case AccessibilityNodeInfo.ACTION_FOCUS: {
                if (!hasFocus()) {
                    // Get out of touch mode since accessibility
                    // wants to move focus around.
                    getViewRootImpl().ensureTouchMode(false);
                    return requestFocus();
                }
            }
于 2017-12-18T20:09:25.823 に答える