Подтвердить что ты не робот

Android: показать/скрыть строку состояния/панель питания

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

Я включил 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);

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

//редактировать

Я посмотрел на этот намек здесь: 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 и увидел, что что-то происходит.

показать: http://pastebin.com/CidTRSTi hide: http://pastebin.com/iPS6Kgbp

4b9b3361

Ответ 1

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

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

Ответ 2

Для некоторых людей отображение строки состояния путем очистки 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);
    }

Ответ 3

Одна из функций, представленных в KitKat, - Иммерсивный режим. Режим Immersive дает пользователю возможность отображать/скрывать строку состояния и навигационную панель с помощью салфетки. Чтобы попробовать, нажмите кнопку "Toggle immersive mode", а затем попробуйте вставлять и вынимать панель!

Пример:

public void toggleHideyBar() {

        int uiOptions = getActivity().getWindow().getDecorView().getSystemUiVisibility();
        int newUiOptions = uiOptions;
        boolean isImmersiveModeEnabled =
                ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);
        if (isImmersiveModeEnabled) {
            Log.i(TAG, "Turning immersive mode mode off. ");
        } else {
            Log.i(TAG, "Turning immersive mode mode on.");
        }

        // Navigation bar hiding:  Backwards compatible to ICS.
        if (Build.VERSION.SDK_INT >= 14) {
            newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
        }

        // Status bar hiding: Backwards compatible to Jellybean
        if (Build.VERSION.SDK_INT >= 16) {
            newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;
        }

        if (Build.VERSION.SDK_INT >= 18) {
            newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        }

        getActivity().getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
        //END_INCLUDE (set_ui_flags)
    }

Ответ 4

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

ПОКАЗЫВАТЬ

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

ПРЯТАТЬСЯ

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

Ответ 5

Ссылка - 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);
}

Ответ 6

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

Ответ 7

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

Ответ 8

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

window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

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

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

Ответ 9

с помощью этого метода, используя 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);
}