Как скрыть навигационную панель постоянно в андроид-активности?
Я хочу, чтобы панель навигации постоянно скрывалась в моей деятельности (а не во всей системе).
сейчас я использую этот кусок кода
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
Он скрывает панель, но когда пользователь касается экрана, он снова отображается. есть ли способ скрыть это навсегда до активности onStop()
;
Ответы
Ответ 1
Отрывки:
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
Вот еще один связанный с этим вопрос:
Навигация в режиме погружения становится липким после нажатия на тома или минимизации-восстановления
Ответ 2
Сделай это.
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()
.
Ответ 3
Согласно сайт разработчика 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);
}
См. это для получения дополнительной информации об этом.
Скрыть системную панель в планшетах
Ответ 4
Использование: -
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
В планшетах с Android 4+ невозможно скрыть панель "Система/Навигация".
Из документация:
SYSTEM_UI_FLAG_HIDE_NAVIGATION - это новый флаг, который запрашивает навигационная панель полностью скрывается. Имейте в виду, что это работает только для панель навигации, используемая некоторыми мобильными телефонами (она не скрывает системную панель на планшетах).
Ответ 5
Проблема с безопасностью:
fooobar.com/questions/57557/...
поэтому его невозможно скрыть Навигация на планшете навсегда с помощью одного вызова в начале создания представления. Он будет скрыт, но он появится при касании экрана. Таким образом, только второе касание к экрану может вызвать onClickEvent на вашем макете. Поэтому вам нужно перехватить этот вызов, но я еще не справился с этим, я обновлю свой ответ, когда узнаю его. Или вы уже ответили?
Ответ 6
Я думаю, что код удара поможет вам и добавит этот код перед установкой 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);.
Ответ 7
Это мое решение:
Сначала определите логическое значение, указывающее, отображается ли панель навигации или нет.
boolean navigationBarVisibility = true //because it 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 в ваше представление. Я использую для себя такое представление:
playerSurface.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setNavigationBarVisibility(navigationBarVisibility);
}
});
Кроме того, мы должны вызвать этот метод при запуске активности. Потому что мы хотим скрыть это в начале.
setNavigationBarVisibility(navigationBarVisibility);
Ответ 8
Попробуйте это:
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
Ответ 9
Для людей, которые ищут более простое решение, я думаю, что вы можете просто написать эту строку кода в
onStart()
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Это называется режим погружения. Вы можете посмотреть на официальную документацию для других возможностей.