2016-12-17 19 views
1

現在、IME(InputMethodEditor)アプリケーションを開発しているので、サブクラス化されたInputMethodServiceが存在し、keyboardViewを拡張します。この場合、ビューを膨らませるだけで、そのサイズはキーボードに似ています。ビューは、タッチイベントの位置を、主に下に移動し、上に移動します。私はイベントの動きに与えられたタッチ位置をテストしているので、これを最小限に抑えました。記録されたすべての位置はIMEウィンドウからの相対位置ですが、移動ジェスチャが(上の)ビューを超えた場合、y座標は継続せずゼロのままです。Android IMEのタッチイベントは常にウィンドウディメンションに限定されます

アクションの移動がIMEウィンドウの外にある場合でも、ポインタの実際の座標を引き続き受け取る方法はありますか。

EDIT:目的は、IMEウィンドウのビューからアクションの移動イベントを別のウィンドウのビューに渡すことができるかどうかをテストすることです(つまり、IMEウィンドウから別のウィンドウにアクションをシームレスに移動することができます)。 IMEウィンドウに戻ります。しかし、移動座標はIMEウィンドウにバインドされているように見えるので、タッチがIMEウィンドウを超えた場合は動作しません。

+0

親ビューの幅と高さに一致するコンテナビュー内にIMEビューを配置してみてくださいこのコンテナの背景が何もないことを確認してくださいビューを膨張させると、IME、あなたはまだキーボードの後ろにあるものを制御することができるので、あなたのY座標はゼロ以外の何かを表示するはずです。^ – MohammedAlSafwan

+0

これは、関連するビューの正しいy値を提供しますが、IMEはもはや機能しません。 IMEは実質的にフルスクリーンで、タッチは下のビューには収まらない。また、アプリはIMEに対して相対座標を設定します。フルスクリーンにする必要がある場合、アプリは表示されません。 – mitim

+0

@ TK52実際には、あなたがonComputeInsets()をオーバーライドし、必要なIMEの可視部分に値を設定すると、あなたの提案はうまくいく可能性があります。 – mitim

答えて

0

セキュリティ上の理由から、これはIMEウィンドウの制限的な特徴であると思われ、これを賢明な方法で見つけることはできませんでした。また、この回答に記載されているように、この制限に対処するオーバーレイを持つ方法はありません。https://stackoverflow.com/a/33698077/3678942は、タッチイベントがウィンドウを通過することを許可できません。

これを回避する方法の1つは、y値がゼロである(つまり、IMEウィンドウの最上位に達しており、タッチイベントとそのx値(引き続き計算される)

候補ビューを使用すると、IMEウィンドウが表示されずに表示されていてもそれに対応するためにサイズが拡大され、表示されている入力ビューだけが測定されます。

関連する問題