web-dev-qa-db-ja.com

Androidアクティビティでナビゲーションバーを永続的に非表示にする方法

(システム全体のUIではなく)アクティビティでナビゲーションバーを永続的に非表示にしたい。今、私はこのコードを使用しています

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

バーを非表示にしますが、ユーザーが画面に触れると再び表示されます。アクティビティonStop();まで永久に隠す方法はありますか?

63

スニペット:

FullScreenFragment.Java

HideNavigationBarComponent.Java


これはAndroid用です4.4 +

没入モードを試してください https://developer.Android.com/training/system-ui/immersive.html

高速スニペット(Activityクラスの場合):

private int currentApiVersion;

@Override
@SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    currentApiVersion = Android.os.Build.VERSION.SDK_INT;

    final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

    // This work only for Android 4.4+
    if(currentApiVersion >= Build.VERSION_CODES.KitKat)
    {

        getWindow().getDecorView().setSystemUiVisibility(flags);

        // Code below is to handle presses of Volume up or Volume down.
        // Without this, after pressing volume buttons, the navigation bar will
        // show up and won't hide
        final View decorView = getWindow().getDecorView();
        decorView
            .setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
            {

                @Override
                public void onSystemUiVisibilityChange(int visibility)
                {
                    if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
                    {
                        decorView.setSystemUiVisibility(flags);
                    }
                }
            });
    }

}


@SuppressLint("NewApi")
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
    super.onWindowFocusChanged(hasFocus);
    if(currentApiVersion >= Build.VERSION_CODES.KitKat && hasFocus)
    {
        getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

音量を上げるまたは音量を下げるときにナビゲーションバーに表示される問題がある場合。 onCreateにコードを追加しました setOnSystemUiVisibilityChangeListener を参照してください

関連する別の質問を次に示します。

イマーシブモードナビゲーションは、ボリュームプレスまたはminimise-restoreの後にスティッキーになります

95
Dawid Drozd

これを行う。

public void FullScreencall() {
    if(Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
        View v = this.getWindow().getDecorView();
        v.setSystemUiVisibility(View.GONE);
    } else if(Build.VERSION.SDK_INT >= 19) {
        //for new api versions.
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        decorView.setSystemUiVisibility(uiOptions);
    }
}

これは100%動作し、遅いバージョンのAPIでも同じことができます。遅い回答であっても、他の人の助けになることを願っています。

これを永続的にしたい場合は、FullscreenCall()メソッド内でonResume()を呼び出すだけです。

48
Evish Verma

つかいます:-

view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Android 4+を実行しているタブレットでは、システム/ナビゲーションバーを非表示にすることはできません。

ドキュメント から:

SYSTEM_UI_FLAG_HIDE_NAVIGATIONは、ナビゲーションバーを完全に非表示にすることを要求する新しいフラグです。これは、一部の携帯電話で使用されるナビゲーションバーでのみ機能することに注意してください(タブレットのシステムバーは非表示になりません)。

3
Namrata

Android Developer site によると

ナビゲーションバーを永久に隠すことはできないと思います(私の知る限り)。

ただし、1つのトリックを実行できます。そのトリックの心。

ユーザーが画面に触れると、navigation barが表示されます。すぐに非表示にします。その楽しみ。

これを確認してください

void setNavVisibility(boolean visible) {
int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | SYSTEM_UI_FLAG_LAYOUT_STABLE;
if (!visible) {
    newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN
            | SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}

// If we are now visible, schedule a timer for us to go invisible.
if (visible) {
    Handler h = getHandler();
    if (h != null) {
        h.removeCallbacks(mNavHider);
        if (!mMenusOpen && !mPaused) {
            // If the menus are open or play is paused, we will not auto-hide.
            h.postDelayed(mNavHider, 1500);
        }
    }
}

// Set the new desired visibility.
setSystemUiVisibility(newVis);
mTitleView.setVisibility(visible ? VISIBLE : INVISIBLE);
mPlayButton.setVisibility(visible ? VISIBLE : INVISIBLE);
mSeekView.setVisibility(visible ? VISIBLE : INVISIBLE);
}

この詳細については、こちらをご覧ください。

タブレットのシステムバーを隠す

3
Sandeep R

そのセキュリティ問題: https://stackoverflow.com/a/12605313/1303691

したがって、ビューの作成の開始時に1回の呼び出しでタブレットのナビゲーションを永続的に非表示にすることはできません。非表示になりますが、画面に触れるとポップアップ表示されます。したがって、画面を2回タッチするだけで、レイアウトでonClickEventが発生する可能性があります。したがって、この呼び出しをインターセプトする必要がありますが、まだ管理していません。見つかったときに答えを更新します。それとも、あなたはすでに答えをすでに持っていますか?

1
swisscoder

打撃コードはあなたを助け、setContentView()の前にそれらのコードを追加すると思います

getWindow().setFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

SetContentView()getWindow()。getDecorView()。setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);の背後にあるこれらのコードを追加します。

1
qingfei song

多くの優れた具体的な詳細がここにレイアウトされています: フルスクリーンモードを有効にする

これは公式のGoogle/Androidリンクですので、「質問に答えずにリンクを貼り付けるだけ」で私に投票しないでください。

0
Chris Sprague

これを試して。

View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
          | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

それが役立つかどうか教えてください... :)

0
Rashad

それは私の解決策です:

まず、ナビゲーションバーが表示されるかどうかを示すブール値を定義します。

boolean navigationBarVisibility = true //because it's visible when activity is created

ナビゲーションバーを非表示にする2番目の作成メソッド。

private void setNavigationBarVisibility(boolean visibility){
    if(visibility){
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);
        navigationBarVisibility = false;
    }

    else
        navigationBarVisibility = true;
}

デフォルトでは、ナビゲーションバーを非表示にした後にアクティビティをクリックすると、ナビゲーションバーが表示されます。表示されている場合は非表示にします。

OnClickListenerをビューに設定します。私はSurfaceViewを使用しているので、私にとっては:

    playerSurface.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setNavigationBarVisibility(navigationBarVisibility);
        }
    });

また、アクティビティの起動時にこのメソッドを呼び出す必要があります。初めに隠したいからです。

        setNavigationBarVisibility(navigationBarVisibility);
0
PeerNet