Мое решение объединяет ответы от:
Я добавил эти методы в свою активность. Для переключения на полный экран используйте setFullScreen(!isFullScreen())
.
public boolean isFullScreen() {
return (getWindow().getAttributes().flags &
WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0;
}
@SuppressLint("NewApi")
public void setFullScreen(boolean full) {
if (full == isFullScreen()) {
return;
}
Window window = getWindow();
if (full) {
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
if (Build.VERSION.SDK_INT >= 11) {
if (full) {
getActionBar().hide();
} else {
getActionBar().show();
}
}
}
В моем случае я хотел, чтобы кнопка меню выполняла переключение. Проблема: на устройстве без аппаратной кнопки меню, скрытие панели действий также скрывает переключение для возврата из полноэкранного режима. Итак, я добавил некоторую дополнительную логику, чтобы она скрывала панель действий только в том случае, если на устройстве есть кнопка аппаратного меню. Обратите внимание, что на устройствах с SDK 11-13 такого не было.
if (Build.VERSION.SDK_INT >= 14
&& ViewConfiguration.get(this).hasPermanentMenuKey()))) {
if (full) {
getActionBar().hide();
} else {
getActionBar().show();
}
}
Старые устройства (с запущенным Gingerbread или более ранними версиями) имеют строку заголовка вместо панели действий. Следующий код скрывает его, но имейте в виду, что строку заголовка нельзя отобразить / скрыть после начала действия. Я включил в свое меню справки сообщение о том, что изменения в полноэкранном режиме могут не действовать в полной мере на старых устройствах, пока они не перезапустят приложение / действие (что, конечно, предполагает, что вы сохраняете свой выбор и выполняете этот код, только если они этого хотят). полный экран).
// call before setContentView()
if (Build.VERSION.SDK_INT < 11) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
}