내 활동에서 내비게이션 바를 영구적으로 숨기고 싶습니다 (전체 시스템 UI가 아님). 이제이 코드를 사용하고 있습니다.
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
막대를 숨기지 만 사용자가 화면을 터치하면 다시 표시됩니다. 활동할 때까지 영구적으로 숨길 수있는 방법이 있습니까 onStop()
?
답변
짧은 발췌:
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가 발생할 수 있습니다. 따라서이 전화를 가로 챌 필요가 있지만 아직 처리하지 않았기 때문에 답을 찾으면 업데이트하겠습니다. 아니면 이제 이미 답이 되었습니까?