Как переключить статусбар?

Я ищу способ показать и скрыть строку состояния сonClickListener, но только показывая, что это работает.

WindowManager.LayoutParams lp = getWindow().getAttributes();
if (isStatusbarVisible)
    lp.flags = LayoutParams.FLAG_FULLSCREEN;
else
    lp.flags = LayoutParams.FLAG_FORCE_NOT_FULLSCREEN;
getWindow().setAttributes(lp);
isStatusbarVisible = !isStatusbarVisible;

Скрытие строки состояния с помощьюFLAG_FULLSCREEN кажется, работает, только если флаг установлен перед вызовомsetContentView().

Есть ли другой способ скрыть строку состояния?

Ответы на вопрос(4)

лизации полноэкранного метода:

private void toggleFullscreen() {
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    getWindow().setAttributes(attrs);
}

Он использует побитовую логику XOR для переключенияFLAG_FULLSCREEN.

Решение Вопроса

Ответ довольно прост, очисткаFLAG_FULLSCREEN флаг это все что нужно:

if (isStatusBarVisible)
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
else
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

наконец, придумал эту реализацию, чтобы включать и выключать полноэкранный режим:

private void toggleFullscreen() {
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    getWindow().setAttributes(attrs);
}

Он использует побитовую логику XOR для переключенияFLAG_FULLSCREEN.

API Android постоянно меняется. Вот более актуальный ответ на вопрос.

Согласно этому документу:https://developer.android.com/training/system-ui/status.html

Скрыть строку состояния на Android 4.1 и выше

Вы можете скрыть строку состояния в Android 4.1 (уровень API 16) и выше с помощью setSystemUiVisibility (). setSystemUiVisibility () устанавливает флаги пользовательского интерфейса на уровне отдельного представления; эти настройки агрегируются на уровне окна. Использование setSystemUiVisibility () для установки флагов пользовательского интерфейса дает вам более детальный контроль над системными панелями, чем использование флагов WindowManager. Этот фрагмент скрывает строку состояния:

View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();

Заимствование заводного XOR из других ответов:

public void toggleFullscreen() {
    View decorView = getWindow().getDecorView();

    int uiOptions = decorView.getSystemUiVisibility();

    uiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;

    decorView.setSystemUiVisibility(uiOptions);
}

Это работает (я использую его) и, кажется, функционирует так же, какgetWindow().setAttributes() решение, но это рекомендуемый путь в документации для разработчиков.

Ваш ответ на вопрос