javaで作成されたコンポーネントに対するnativeactivityのコンテンツビューを設定する方法
-
26-10-2019 - |
質問
Javaで作成されたコンポーネント(framelayout、imageViewなど)に自然な反応性の内容を設定する方法はありますか? (Xperia Playでタッチパッド入力を取得するために)nativeactivityを使用する必要がありますが、Javaコードで作成されたコンポーネントを表示する必要もあります。
OnCreateコマンドをオーバーライドして、SetContentViewを呼び出してみましたが、エラーは発生しませんが、コンテンツビューがネイティブコードによってすでに設定されているため)。ある種のウィンドウIDまたはネイティブコードに渡してコンテンツビューがどうあるべきかを伝えることができるものはありますか、それともXMLでこれを設定して、Nativectivityのコンテンツビューを変更できるコンポーネントに設定できますかJavaから?
これ以上の情報が必要な場合はお知らせください。
解決
私は最終的に機能する方法を見つけたので、同じ問題のある他の人のために答えをここに投稿します。
oncreate()メソッドでは、特定のウィンドウフラグ(feature_no_title、flag_fullscreen、flag_keep_screen_onなど)を設定している場合は、super.oncreate(または無視される)を呼び出す前にそれらを行います。それから、あなたは通常どこに置いても、これを置くでしょう:
setContentView( whatever );
代わりにこれを行います:
getWindow().takeSurface( null );
getWindow().setContentView( whatever );
これが、Java側からコンテンツを制御するための基本的な方法です。コンテンツを扱うコード内の任意の場所は、「this」の代わりに「getWindow()」を使用します。
他のいくつかのことを覚えておくべきことは、通常のOnkeyとOntouchメソッドが呼び出されないことです(代わりに、ネイティブの同等物は代わりになります)。したがって、Java側で入力を処理できる必要がある場合は、設定する必要があります。 JNIリンケージを上げて、Javaのネイティブから情報を送信します。他のすべては、公式のXperia Play TouchPadサンプルコード(AndroidManifest.xmlなどの追加)に含まれていると思います。
参考のために私のプロジェクトを見たい場合は、それはオープンソースであり、次のことを見つけることができます。
http://www.paulscode.com/forum/index.php?topic=75.msg1540#msg1540
「Xperia Play Touch-Pad例」の横にある「ソースコード」リンクをクリックするだけです。それはあなたにとってそれほど有用ではないかもしれません。なぜなら、それはかなり大きなプロジェクトであり、あなたが探しているものを見つけるのが難しいかもしれないからです。問題がある場合は、そこに私のフォーラムに質問を投稿するか、私にメールしてください。喜んで助けてくれます。