ナビゲーションバーの非表示について

3,524 views
Skip to first unread message

Hiroki

unread,
Oct 23, 2014, 5:06:40 AM10/23/14
to android-g...@googlegroups.com
初めて投稿させて頂きます、Hirokiと申します。

長文失礼いたします。

現在、Android4.4.2のタブレットを使用しての開発をおこなっており、
ナビゲーションバーの非表示を実装しようと考えております。

非表示自体は、実装できておりますが、一つ問題が発生しております。
解決方法など、ご存じの方がおりましたら、ご教授頂けると幸いです。

以下、実装やOSに関する情報、問題点を纏めさせていただきます。

[問題点]
ナビゲーションバーが非表示の状況で、端末の最下部から上方向にフリックすると、
ナビゲーションバーが、一瞬表示されてしまう。

[問題詳細]
onCreate()などで、ナビゲーションバーを非表示に設定し、
フリック動作により、ナビゲーションバーを表示した場合に、ナビゲーションバーを
非表示に設定しているため、
一瞬ナビゲーションバーが表示されてしまいます。

また、タッチイベント制御により、フリック、スクロール等のイベントが発生した場合に、
ナビゲーションバーを非表示とするように実装致しましたが、
一瞬ナビゲーションバーを表示する動作については、改善できませんでした。

[使用OS]
Android 4.4.2

[実装]
①ナビゲーションバーを非表示とし、システムバーを表示する。
  ・メソッド
    activity.getWindow().getDecorView().setSystemUiVisibility();

  ・setSystemUiVisibility()の引数:
    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE

②ナビゲーションバーの表示状態を取得するリスナーを登録し、
   ナビゲーションバーが表示された場合に、非表示に設定する。

  ・コード
    protected void onStart() {
        super.onStart();
        this.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(mOnSystemUiVisibilityChangeListener);
    }

    private OnSystemUiVisibilityChangeListener mOnSystemUiVisibilityChangeListener = new OnSystemUiVisibilityChangeListener(){
        @Override
        public void onSystemUiVisibilityChange(int visibility) {
            if (visibility == 0) getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION  | View.SYSTEM_UI_FLAG_IMMERSIVE);
        }
    };

Manabu

unread,
Nov 7, 2014, 2:39:57 AM11/7/14
to android-g...@googlegroups.com

SYSTEM_UI_FLAG_IMMERSIVE_STICKY使えば、普通のタッチでは表示されないままと思いますが、

結局のところ端末の最下部もしくは最上部からのスワイプで表示されてしまいますね。ユーザー的にはNavigationBar消えっぱだと困りますから。

尚、アプリの前にAndroidのシステム側でTouchイベントがハンドルされてしまうので、
上記ケースでもNavigationBarを隠したままにしとくのは無理と思います。
ぱっと見、下記コード内でそのあたりの処理をやっているようです。

またご存知と思いますが公式ドキュメントにも以下のように制限事項として記載があります。

There is a limitation: because navigation controls are so important, the least user interaction will cause them to reappear immediately. When this happens, both this flag and SYSTEM_UI_FLAG_FULLSCREEN will be cleared automatically, so that both elements reappear at the same time.

何らかのHelpになれば幸いです。

Manabu

Hiroki

unread,
Jan 6, 2015, 5:49:34 AM1/6/15
to android-g...@googlegroups.com
Hirokiです。

Manabuさん、返信頂き有難うございます。
また、ご返信が遅くなり大変申し訳ございません。

やはり、ユーザビリティを考えると、完全非表示はできないですし、
公式ドキュメントにも、頂いたような記載もございますね。

実際の実装については、ご連絡頂いたFLAGで実装し、最下部等で表示した場合は、
各ボタン(HOME/BACK/TASK)の制御を行う事にしました。


2014年11月7日金曜日 16時39分57秒 UTC+9 Manabu:
Reply all
Reply to author
Forward
0 new messages