[android] Android 활동에서 탐색 모음을 영구적으로 숨기는 방법은 무엇입니까?

내 활동에서 내비게이션 바를 영구적으로 숨기고 싶습니다 (전체 시스템 UI가 아님). 이제이 코드를 사용하고 있습니다.

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

막대를 숨기지 만 사용자가 화면을 터치하면 다시 표시됩니다. 활동할 때까지 영구적으로 숨길 수있는 방법이 있습니까 onStop()?



답변

짧은 발췌:

FullScreenFragment.java

HideNavigationBarComponent.java


Android 4.4 이상용입니다.

몰입 형 모드 https://developer.android.com/training/system-ui/immersive.html 사용해보기

빠른 스 니펫 ( 활동 클래스 용) :

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

다음은 또 다른 관련 질문입니다.

몰입 형 모드 탐색은 볼륨을 누르거나 복원을 최소화 한 후 고정됩니다.


답변

이 작업을 수행.

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().


답변

더 간단한 솔루션을 찾는 사람들을 위해이 코드 한 줄을
onStart()

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

몰입 형 모드라고합니다. 다른 가능성에 대해서는 공식 문서를 볼 수 있습니다.


답변

Android 개발자 사이트 에 따르면

(내가 아는 한) 내비게이션 바를 영구적으로 숨길 수 없다고 생각합니다 ..

그러나 한 가지 트릭을 할 수 있습니다. 그 속임수는 당신을 생각합니다.

그냥 때 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);
}

이에 대한 자세한 내용은이 ..

태블릿에서 시스템 표시 줄 숨기기


답변

사용하다:-

view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Android 4 이상을 실행하는 태블릿에서는 시스템 / 내비게이션 바를 숨길 수 없습니다.

에서 문서 :

SYSTEM_UI_FLAG_HIDE_NAVIGATION은 탐색 모음을 완전히 숨기도록 요청하는 새 플래그입니다. 이 기능은 일부 핸드셋에서 사용하는 탐색 모음에서만 작동합니다 (태블릿에서 시스템 표시 줄을 숨기지 않음).


답변

내 솔루션입니다.

먼저 탐색 모음이 표시되는지 여부를 나타내는 부울을 정의합니다.

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

두 번째는 탐색 모음을 숨기는 방법을 만듭니다.

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);


답변

보안 문제 :
https://stackoverflow.com/a/12605313/1303691

따라서보기 생성 초기에 한 번의 호출로 태블릿에서 내비게이션을 영구적으로 숨길 수 없습니다. 숨겨 지지만 화면을 터치하면 팝업됩니다. 따라서 화면을 두 번째 터치하면 레이아웃에 onClickEvent가 발생할 수 있습니다. 따라서이 전화를 가로 챌 필요가 있지만 아직 처리하지 않았기 때문에 답을 찾으면 업데이트하겠습니다. 아니면 이제 이미 답이 되었습니까?