3

私は C++ で非常に単純なクロス プラットフォーム ウィンドウ クラスを開発しているので、レンダリングするサーフェスがあります。これまでのところ、Linux と Windows で動作するようになりました。OS-Xで動作するようになったら、Androidフォンで動作させたいと思います。

ただし、SurfaceFlinger で作成されたすべての「ウィンドウ」が全画面表示になるのか、それとも Linux や Windows のウィンドウのようにデスクトップの一部しか占有できないのかを知る必要がありますか? 携帯電話のデスクトップにウィジェットを配置できることは知っていますが、ポップアップやデスクトップ上にホバーするフレームのようなアプリを見たことがないので、これを尋ねます。

電話の解像度よりも小さい「ウィンドウ」の作成はどのように機能しますか? 描画可能なサーフェスを中央に配置し、黒い境界線を残すだけですか? また、アプリケーションは複数の「ウィンドウ」を持つことができますか?

4

2 に答える 2

2

Surfaceflinger は、その名前が示すように、ウィンドウではなくサーフェスを処理します。各ウィンドウは、実際には描画できる 1 つのサーフェスを保持しますが、これらは異なるタイプのクラスです。特定のアプリケーションのウィンドウの ViewRootImpl (ウィンドウのトップ ビュー) が何らかの方法で作成または変更されるたびに、WindowManagerService の再レイアウト関数が呼び出されます。ここで、退屈な詳細をスキップして、WindowManagerService がサーフェスを作成します。サーフェスは任意のサイズにすることができ、複数のディスプレイを使用している場合は、特定のディスプレイに接続することもできます (ただし、これはまだ実装されていません)。これはあなたの質問に戻ります: - サーフェス (必要に応じてウィンドウ) は任意のサイズにすることができます。あなたが言及した黒い境界線は、実際には現在のウィンドウの下に配置されている(そして黒く塗られている)ウィンドウから来ています。- はい、

ウィジェットに関しては、Launcher (デスクトップ アプリ) がそれらをどのようにサポートし、ドラッグ アンド ドロップの動作をサポートしているかは知っていますが、それらが実際に新しいウィンドウであるかどうかを自問したことはありません。

于 2012-07-04T07:58:36.413 に答える
0

また、アプリケーションは複数の「ウィンドウ」を持つことができますか? はい、アプリケーションは複数のウィンドウを持つことができます。1. ステータスバー ウィンドウ 2. アクティビティ画面ウィンドウ 3. ナビゲーション ウィンドウ 4. ダイアログなど。

于 2015-05-12T06:21:12.843 に答える