よく知られているTYPE_SYSTEM_OVERLAY
メソッドを使用して、常に他のビューの上にあるフルスクリーンオーバーレイを作成しています。ステータスバーが別のアプリケーションによって隠されている場合ステータスバーの可視性を検出する/ TYPE_SYSTEM_OVERLAYが自動的にサイズ変更されない
17
スルーAPI 10
からMoto Atrix2 API15
各AVD
ためにオーバーレイビューは、(垂直に拡大)に自動的にリサイズ。オーバーレイは他のすべてのビューの「上に」表示されているように見えます。ステータスバーが再度表示されると、オーバーレイは自動的にサイズを自動的に縮小します(垂直ピクセルは少なく、基本的にステータスバーの高さを減算します)。
これは望ましい動作であり、多くの異なるエミュレータや少なくとも1台のデバイスメーカー(モトローラ)で動作しているため、これが例外または欠陥のある動作ではないと思う傾向がありますが、 「tはaddtl devices.
問題へのアクセスがあります。また、Kindle Fire (API10?)
上でテストSamsung GS2 (API15)
&でをステータスバーが別のアプリケーションによって隠されているとき、オーバーレイが自動的に(ステータスバーは、かつてのスペースを埋める)サイズは変更されません。 (フルスクリーンアプリの背後にあるステータスバー)。これらのデバイスでは、ビューを作成した後、最初にビューのonSizeChangedオーバーライドからイベントを取得しません。
params = new WindowManager.LayoutParams(
1, WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSPARENT);
wm.addView(sizeLayout, params);
sizeLayoutがonSizeChangedオーバーライドがあります
は、ここで適切なコードです。
私はSYSTEM_ALERT、FLAG_LAYOUT_IN_SCREENなどを見つけることができます。windowmanager
layoutparam
私はこれを理解するまで眠りません!
編集11/30/12:私は@deviantからこれを見つけた:https://stackoverflow.com/a/9195733/1851478私がやっている基本的である、しかし問題は、特定のデバイスが自動的にsystem_overlayをリサイズないで残っています。おそらく私はバグを起こすべきです。
詳細情報:ビューツリーの上部にフルスクリーンのアプリケーションがあるときに強制的に再描画を強制する(またはオーバーレイアプリケーションを読み込むだけでも)、ステータスバーに通常表示される領域にオーバーレイが描画されません(ステータスバーが描画時に表示されていなくても)、オーバーレイが一番上のウィンドウの上にオーバーレイされていないかのように見えます(これは、フルスクリーンのアプリには、さまざまな方法を使ってフルスクリーンにすることができます)。これらのデバイスでは、ステータスバーを表示するためにオーバーレイを表示する唯一の方法(ステータスバーが表示されていなくても)は、フラグFLAG_LAYOUT_IN_SCREEN
を使用しますが、レイアウトのサイズは決して変更されず、元の問題に戻って、なぜこれは一部のデバイスでは動作しますが、他のデバイスでは動作しません。
編集12/12/12:だから私のアプリはそれができるSystemUIビューを所有していないので、残念ながら私はこの上の任意のさらなる運を持っていなかった、と私はビューにgetLocalVisibleRectを使用してみましたが、オーバーレイの下にあるものを検出しません。私はこれを行うことができるカスタムROMと思うが、私は根なしの解決策が必要です。
マーケットプレイスの他のアプリは、上に挙げた非稼働中の電話機のステータスバーを検出するのと同じ問題を抱えています。例:クールツール、オメガステータスバー&ステータスバー+。バウンティは育てた。
編集12/19/12写真が追加されました。作業中のデバイスでは、灰色の領域も黒い領域(現在フルスクリーンのすべてのアプリケーション)をカバーしています。黒い領域は実際には画面全体をカバーしていますが、灰色の領域もオーバーレイとして表示していますフルスクリーン(作業中/使用中のデバイスおよび表示中かどうかに応じてステータスバーの高さをマイナスまたはプラスします)。
あなたは、必要な行動のスクリーンショットを追加してください。 –
@写真が追加されました。 – logray
フルスクリーン表示にしましたか?あなたのビューを追加する前に試してみてください: //全画面表示 WindowManager.LayoutParams attrs = mActivity.getWindow()。getAttributes(); attrs.flags | = WindowManager.LayoutParams.FLAG_FULLSCREEN; mActivity.getWindow()。setAttributes(attrs); –