6

Android タブレットのステータス バーを暗くする方法を知っています。私はそのコードでこれを行います:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);

正常に動作しますが、一度だけです。ステータスバーに触れるとアクティブになり、その後アプリケーションのアクティビティに戻ってもステータスバーはアクティブのままです(ドットではなくアイコンで)。onResume 呼び出しをログオンしようとしましたが、呼び出されていないため、再度グーグル検索して別の解決策を見つけました-ステータスバーの可視性を変更するためのハンドラーを使用します:

getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
    @Override
    public void onSystemUiVisibilityChange(int visibility) {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
    }
});

時々うまくいきますが、何度か試してみると壊れます。

ゲームにはこれが必要です - 理論的には、タッチのたびに、またはメインループのたびに呼び出すことができますが、これは悪い考えのようです (さらに、特定のスレッドから呼び出す必要があります -ビュー階層を作成した元のスレッドのみが可能です)その見解に触れてください。

私の質問は、ステータスバーの自動薄暗いを実装する最良の方法は何ですか? または、私の状況では、とにかく。

4

4 に答える 4

2

これに対する解決策は、ルート ビューに View.OnSystemUiVisibilityChangeListener を設定することです。

イベントが発生すると、再び暗くなるまでしばらく待つ必要があります。タイマーが適しています。

private class MySystemUiVisibilityChangeListener implements View.OnSystemUiVisibilityChangeListener {

    @Override
    public void onSystemUiVisibilityChange(int visibility) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                MyActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mRootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);                           
                    }
                });
            }
        }, 1000);
    }

}
于 2013-01-22T22:54:28.550 に答える
0

私もこの問題に遭遇しました(ただし、ナビゲーションフラグを非表示にするため)、Googleがシステムバーを常に非表示/薄暗くする機能をネイティブに無効にしたようです。特にモバイルデバイスで非常に多くのオンタッチイベントが発生するという事実を考えると、そのメソッドを常に呼び出すとスレッドで失敗したり、パフォーマンスの問題が発生したりする可能性があることに同意します。

最終的には、ユーザーがデバイスをルート化してシステム バーを完全に削除しない限り、これに対する解決策はないと思います。

于 2013-01-18T17:24:16.493 に答える