前もって助けてくれてありがとう。私の Java はまだ未熟であることを前もって認めておきます。私はこの答えをほぼ一日中探していましたが、さまざまなアプローチを試してみましたが役に立ちませんでした。
GLSurfaceView クラスを実装した Eclipse プロジェクトにゲームをエクスポートする商用ゲーム エンジンを使用しています。キーダウンおよびキーアップイベントのために単一のキーコードをゲームエンジンに送信するフックがあり、これらのフックを使用して Android キーボード (ソフトまたはハード) からキーを送信したいと考えています。
view.onKeyUp、onKeyDown、および onKeyMultiple インターフェイスをオーバーライドすることで、やりたいことのほとんどすべてを実現できますが、Swype のような IME を使用すると、まだ 1 つの問題が残っています。
単語をスワイプすると、フローティング ウィンドウに表示されますが (スワイプがこれを描画していると思います)、onKeyUp、onKeyDown、または onKeyMultiple コールバックでは表示されません。キーボードでスペースまたはその他の文字を押すと、以前にスワイプした文字列を送信する onKeyMultiple コールバックを取得します。
自分の InputConnection で finishComposingText() を呼び出すだけでよいと思ったので、GLSurfaceView クラスの View.onCreateInputConnection メソッドをオーバーライドしてから、ゲーム エンジンの DrawFrame() メソッドで finishComposingText() を呼び出したところ、ある程度機能しました。実際にはすぐに onKeyMultiple コールバックを介してテキストを送信しましたが、キーを押すと、同じテキストが再度送信され、「3D 編集ボックス」に複製されました。また、すべてのフレームでそれを呼び出すという考えも好きではありませんでした。
キーを押さなくてもスワイプした直後にスワイプの結果を表示するためにどのようなアプローチをとるべきか、私は完全に迷っています。ゲーム エンジンは TextView または同様の Android ウィジェットを使用していないため、次のことも試してみましたが、うまくいきませんでした。
public InputConnection onCreateInputConnection ( EditorInfo outAttrs )
{
outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE ;
outAttrs.inputType = InputType.TYPE_NULL;
oInputC = new BaseInputConnection ( this, false ) ;
return oInputC;
}
oInputC は、finishComposingText() メソッドを呼び出すために使用できる単なる静的変数です。
誰かがアプローチや参照を提案できますか? このような質問は他に 2、3 しか見つかりませんでしたが、どちらも未回答でした。独自のテキスト編集ボックスを作成し、そのバックエンドを実装する必要がある人はあまりいないようですが、それは基本的に私が行う必要があることです。