最近の携帯電話やタブレットで実行しているときに、Android アプリの「消灯」モードを設定しています。私の onCreate() メソッドに、次を追加しました。
View rootView = getWindow().getDecorView();
rootView.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); // aka View.SYSTEM_UI_FLAG_LOW_PROFILE
これは私が思っていたよりもうまく機能します。私の Android 3.2 タブレットでは、ステータス バーがロー プロファイル モードで開始されます (バーのすべてのボタンがドットに置き換えられます)。バーのボタンを操作すると正常になり、その後ロー プロファイル モードに戻ります (たとえば、ステータス バーから構成/通知ウィンドウを確認した場合)。したがって、これはUIを直接非表示にする「コマンド」というよりも、私のアプリのプロパティのようです。
ただし、処理されないコーナーケースが 2 つあります。まず、ユーザーがドットに触れずにステータスバーをタップすると、バーがアクティブになります。ユーザーが実際にバー上の何かを操作するまで (たとえば、通知を見るか、スクリーンショットを撮る)、ロー プロファイル モードに戻ることはありません。そのため、彼らが私のアプリとのやり取りに戻った場合、ステータス バーはロー プロファイル モードではなくなります。(ギャラリー アプリにもこの問題があるようです。私だけではないかもしれません。) 2 つ目のコーナー ケースは、ロック画面からの履歴書です。電源ボタンをタップしてタブレットをロックし、ロックを解除してアプリを再開すると、ステータス バーが完全に表示されます (操作しても何も変わりません)。(ギャラリー アプリにはこの問題はありません。)
いくつかのブログ投稿では、ハンドラーを設定して、システム UI の可視性の変更をリッスンし、UI が可視になった場合に UI を再度非表示にできることを示唆しています。このような:
rootView.setOnSystemUiVisibilityChangeListener(
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (visibility == View.STATUS_BAR_VISIBLE) {
game.flagUIIsVisible();
}
}
});
私の場合、game
オブジェクトのメソッドは、UI が非表示になったことを示すフラグを設定するだけです。後で、アプリ内にタッチ イベントがあり (それらは同じgame
オブジェクトによって処理されます)、このフラグが設定されている場合は、STATUS_BAR_HIDDEN 呼び出しを再度呼び出します。
ただし、これらのコールバックでは、UI に目に見える影響はありません。一部のログ メッセージから適切なハンドラーが呼び出されていることがわかり、リスナーが呼び出されていることがわかります。
また、パスで STATUS_BAR_HIDDEN 呼び出しを呼び出してみましたが、それでもonResume
違いはありませんでした。
これがある種の既知のバグであるという情報、またはギャラリー アプリが何をしているのかについてのヒントを探しています (別のことをしていると仮定します)。または、試してみる他の API の提案 (または関連するその他の詳細)。
私は libGDX を使用していますが、私のアプリにはビューが 1 つしかないため、非常にシンプルです。また、ビューは libGDX によってタイトルなしでフルスクリーンになるように設定されています。マニフェストで targetSdkVersion を 15 に設定しました。