Android: показать / скрыть строку состояния / панель питания - PullRequest
32 голосов
/ 25 ноября 2011

Я пытаюсь создать кнопку, где я могу скрыть или показать строку состояния на своем планшете.

Я вставил в onCreate

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

и в кнопках отображается:

WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);

скрыть:

WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);

Любые подсказки / подсказки?

// edit

Я смотрел на эту подсказку здесь:http://android.serverbox.ch/?p=306 и изменил мой код следующим образом:

private void hideStatusBar() throws IOException, InterruptedException {
    Process proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 79 s16 com.android.systemui"});
    proc.waitFor();
}

private void showStatusBar() throws IOException, InterruptedException {
    Process proc = Runtime.getRuntime().exec(new String[]{"am","startservice","-n","com.android.systemui/.SystemUIService"});
    proc.waitFor();
}

Поэтому, если я нажимаю на мои кнопки и вызываются методы, я вижу, что что-то происходит, потому что приложение ждет несколько секунд.Я также заглянул в LockCat и увидел, что что-то происходит.

show: http://pastebin.com/CidTRSTi hide: http://pastebin.com/iPS6Kgbp

Ответы [ 8 ]

115 голосов
/ 25 ноября 2011

У вас есть полноэкранная тема, установленная в манифесте?

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

Не думаю, что вы не сможете перейти в полноэкранный режим без этого.

Я бы использовал следующеедобавить и убрать флаг полноэкранного режима:

// Hide status bar
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
// Show status bar
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
32 голосов
/ 04 августа 2015

Для некоторых людей отображение строки состояния путем очистки FLAG_FULLSCREEN может не работать,

Вот решение, которое сработало для меня, ( Документация ) ( Ссылка на флаг )

Скрыть строку состояния

// Hide Status Bar
if (Build.VERSION.SDK_INT < 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
else {
   View decorView = getWindow().getDecorView();
  // Hide Status Bar.
   int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
   decorView.setSystemUiVisibility(uiOptions);
}

Показать строку состояния

   if (Build.VERSION.SDK_INT < 16) {
              getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
    else {
       View decorView = getWindow().getDecorView();
      // Show Status Bar.
       int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
       decorView.setSystemUiVisibility(uiOptions);
    }
2 голосов
/ 13 февраля 2019

Для пользователей Kotlin

ПОКАЗАТЬ

activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

СКРЫТЬ

activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

1 голос
/ 03 мая 2019

используется для колина в Android для скрытия строки состояния в колине нет необходимости использовать точку с запятой (;) в конце строки

window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

в андроиде с использованием языка Java для скрытия строки состояния

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
0 голосов
/ 13 мая 2019

с помощью этого метода, используя SYSTEM_UI_FLAG_IMMERSIVE_STICKY, полный экран возвращается одним нажатием без какой-либо реализации.Просто скопируйте этот метод ниже и назовите его там, где вы хотите в своей деятельности.Подробнее здесь

private void hideSystemUI() {
    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE
                    // Set the content to appear under the system bars so that the
                    // content doesn't resize when the system bars hide and show.
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    // Hide the nav bar and status bar
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);
}
0 голосов
/ 21 февраля 2019
fun Activity.setStatusBarVisibility(isVisible: Boolean) {
    //see details https://developer.android.com/training/system-ui/immersive
    if (isVisible) {
        window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
        window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
    } else {
        window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                or View.SYSTEM_UI_FLAG_FULLSCREEN)
    }
}
0 голосов
/ 07 августа 2018
 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //hide status bar
    requestWindowFeature( Window.FEATURE_NO_TITLE );
    getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN );


    setContentView(R.layout.activity_main);
}
0 голосов
/ 31 августа 2016

Ссылка - https://developer.android.com/training/system-ui/immersive.html

// This snippet shows the system bars. It does this by removing all the flags
// except for the ones that make the content appear under the system bars.
private void showSystemUI() {
    mDecorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
...