10

最近の携帯電話やタブレットで実行しているときに、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違いはありませんでした。

これがある種の既知のバグであるという情報、またはギャラリー アプリが何をしているのかについてのヒントを探しています (別のことをしていると仮定します)。または、試してみる他の A​​PI の提案 (または関連するその他の詳細)。

私は libGDX を使用していますが、私のアプリにはビューが 1 つしかないため、非常にシンプルです。また、ビューは libGDX によってタイトルなしでフルスクリーンになるように設定されています。マニフェストで targetSdkVersion を 15 に設定しました。

4

3 に答える 3

5

Android 3.2 にバグがあると思われます。ステータス バーを無効にする前に再度有効にすることで、ロック画面からの再開の問題を回避できるからonResumeです。いいえOnSystemUiVisibilityChangeListener、必要ありません。

具体的には、私のonResumeパスには次のようなコードがあります。

View rootView = getWindow().getDecorView();
rootView.setSystemUiVisibility(View.STATUS_BAR_VISIBLE);
rootView.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);

ステータスバーを表示するための一見不必要な呼び出しは、デバイスのロックを解除した後、ステータスバーを非表示にするための後続の呼び出しを実際に機能させるようです。

于 2012-06-18T16:43:10.253 に答える
0

これで問題が解決しました:

rootView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
    @Override
    public void onSystemUiVisibilityChange(int visibility) {
        if (visibility == View.SYSTEM_UI_FLAG_VISIBLE) {
            rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
            rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
        }
    }
});

PTありがとう!

于 2013-05-16T16:10:57.307 に答える