1

初めての Android IME を設計していて、少し圧倒されています。私の目標はアクセシビリティに関連しているため、IME フレームワークでは不可能なことを試しているのではないでしょうか。デフォルトのソフトキーボードの例を取り上げ、いくつかの変更を加えて動作させたので、少なくともこれの一部は確実に理解できましたが、私が試みていることのいくつかに関するドキュメントはあまりありません. これが私が意味することです:

現在、タッチスクリーンのみのキーボードを搭載した Android スマートフォンにはアクセスできません。私は現在、IOS/VoiceOver で使用されているものと同様の方法を使用してアクセス可能なタッチスクリーン キーボードを使用しているため、プロジェクトの一部は完了し、IME フレームワークで達成するのはかなり簡単です。

現在、Android のアクセシビリティ API は、テキスト フィールドをナビゲートするためのアクセス可能なフィードバックを提供していません。つまり、Android スクリーン リーダーが読み込まれている状態で、「this」という単語を入力すると、入力した個々の文字が読み上げられますが、「s」の上で左矢印キーを押すと、それは読み上げられません。 . そのため、移動をトラップし、過去にナビゲートされた要素に対して音声フィードバックを提供したいと考えています。ここで私は問題に遭遇し始めます。

現在、左矢印と右矢印には音声フィードバックがあり、左矢印には getCurrentInputConnection.getTextBeforeCursor(1, 0) を使用し、右矢印には同様の呼び出しを使用しています。これにより、移動が処理された後に現在カーソルの下にある文字が取得され、すべて問題ありません。

ただし、私の課題は、行間を上下に矢印で移動するときに発生します。理想的には、現在のテキスト行を取得してそれを話したいのですが、それを行う方法がわかりません。私が考えることができる唯一のことは、getTextBefore/AfterCursor(Integer.MAX_VALUE, 0) とそれらの値を組み合わせて、前と次の \n をフィルタリングして現在の行を決定することです。フィールドのテキスト コンテンツ全体を 1 つのテキスト ブロックとして取得し、カーソル位置を使用してそのテキストのどの部分が現在の行を表しているかを判断する別の方法はありますか? さまざまなインプットメソッドクラスで抽出されたテキストについて何かを見ています。それを監視する方法があるようですが、それが私にとってまったく役立つかどうかはわかりません(つまり、フィールド全体が返されますか?コンテンツ?)

私の次の目標は、標準のテキスト ナビゲーション機能を提供することです。現在、Android のアクセシビリティにはタッチスクリーンの探索が含まれていないため、それ以外の方法で大きなテキスト ブロックをスクロールすることはできません。人々が携帯電話で小説を書くとは必ずしも期待していませんが、段落を上下に移動したり、長いフィールドの上/下に移動したりするための素早いジェスチャーやコマンドを提供したいと考えています。IMF はカーソル移動の方法を提供していますか、それとも IMF の権限外ですか?

4

1 に答える 1

0

正直なところ、私は最初の部分を取得できませんでした:(

2 番目の質問については、手動で処理する必要があります。たとえば、下向きのドローアブルを持つキーを追加して機能させるには、次のことを行う必要があります。

  • onKeyメソッドでコードを確認します。
  • 20 の場合はsendDownUpKeyEvents、その重要なイベントを実行する必要があります。
于 2011-01-05T20:01:47.720 に答える