2017-05-30 6 views
2

背景:Android TalkBack:すべてのアクセシビリティイベントをキャッチするリスナーはありますか?

マイアプリは単語のために、この頭字語は、私たちはそれが

であると仮定しようという問題がABC

何ですか

私はGoogleの音声サービスを使用する場合、それは読み出し大文字です

私はSamsung Voice(S Voice)を使用すると、それは1つの単語としてそれを読み取って素晴らしいです!

なぜコンテンツの説明を設定しないのですか?

ABCは多くの場所に表示されますが、代替コンテンツの説明を設定することはできません。また、それは正しくようにそれを読み出すサービスを介して他の音声のためのコンテンツ記述を破ることができ、Googleの1

マイプランだから私はしばらく前に問題があったと私はクラスのために、この偉大な方法 を見つけ

ことViewGrouponRequestSendAccessibilityEventでした。 要約すると、このメソッドを使用すると、AccessibilityEventを捕まえて、何らかの方法で修正してから処理することができます。とりわけ、コンテンツの説明を読み込んで変更することができます。

私の考えは、現在のTTSまたはTalkBackサービスエンジンが使用されているものを取得し、regexを使用してABC文字のコンテンツの説明を編集し、Samsung Voice(S Voice)の場合はA B Cにします。うまくいけば!

私の質問

誰でも知っているリスナーまたはコールバックがAccessibilityEventは、グローバルまたは一般的な場合に処理されるように取得するには? onRequestSendAccessibilityEventViewGroupのみです。 Activityの代替案が見つかりませんでした。

誰もが読むために私の問題に

感謝をすべての着信AccessibilityEventまたは多分別の解決策をキャッチする方法を知っています!

答えて

0

アクセシビリティイベント/代理人はアクティビティには適用されません。また、アクセスする必要はありません。 Activityには、ルート/コンテンツビューがあり、インスタンスはViewGroupである必要があります。私はアクティビティ内のすべてのアクセシビリティイベントをフィルタリングするためにこれがうまく機能しています

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    View contentView = findViewById(android.R.id.content); 

    contentView.setAccessibilityDelegate(new View.AccessibilityDelegate(){ 
     @Override 
     public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, AccessibilityEvent event) { 
      Log.wtf("Event: " + event.toString()); 
      return super.onRequestSendAccessibilityEvent(host, child, event); 
     } 

    }); 

} 

を私はまた、トークバックが文字でナビゲートする機能をサポートしていることを、指摘します、そして、そのような解決策は、トークバックの問題を解決することができることユーザーは問題として表示されません。実際、状況によっては、これは悪化していると見ることができます。あなたが障害を持つ個人が実際の内容と比較して見ているコンテンツを変更しているときはいつでも、それを慎重に行う必要があります。発表はクリーンであるにもかかわらず:これの素朴な実装は単に "にあるかもしれない

"NASA" 

"ABC" != "A B C" 

例えば異なる場合には、1は次のように「機能」として、この動作を見るかもしれませんtoLowerCase "すべてのコンテンツの説明を追加するか、すべての大文字の間にスペースを追加します。明らかにこれらのソリューションのそれぞれは、異なるタイプの問題を作り出します。

私の主旨は、画面上のコンテンツが混乱している場合、文字でナビゲートできることです。さまざまなプラットフォームのATユーザーは、そのプラットフォームの「クォーク」に慣れてきます。上記の解決策の1つを使用することによって、それらに異なるクォークを強制しています。場合によっては、最もアクセスしやすい解決策は、"ABC" == "ABC"にして、ATユーザーが物事を並べ替えることができるようにすることです。

"理想的な"方法ですべての文字列を修正することに手間を掛けない場合は、物事を単なるままにするほうが最も確実です。しかし、最良の場合のシナリオは、これらの問題とシナリオを考慮してどのソリューションが最も適切に適用されるかを適切に検討することです。

コンテンツ記述でオーバーライドする方が、正規表現や文字列マッチングで潜在的に捕捉される可能性のある例です。これの良い実装は、これらの特定のシナリオを見つけ、REGEX - >文字列辞書を使ってテキストまたはコンテンツ記述プロパティに "replace"を付けて修正し、それを新しいコンテンツ記述として設定することです。私の辞書に、私は常に、個々のキャラクターの発表に向けて言葉に向かうといないよということ

"OFF" -> "off" //This one is super dumb on Google's part. "OFF" shows up on every switch in the OS! 
"ON" -> "on" //See above comment. 
"NASA" -> "nasa" 
etc. 

注:)。理由は、私は文字列の性質を変えていないということです。か、次insanceごとには真である:

oldString.equalsIgnoreCase(newString); 

は、今式に文字列のローカライズを追加しても...これは確かに非常に複雑な問題です。多分、物事だけを残しておくのが最善の選択肢です。

関連する問題