С самого начала Android, вся система была в верхней части строки состояния. В Android Honeycomb строка состояния была перемещена в нижнюю часть экрана. Такие приложения, как игры или средства просмотра изображений, требуют полного внимания пользователя, и большинство из них используют весь экран для отображения. Например, в приложении Галерея по умолчанию, когда вы нажимаете на изображение, оно отображается в полноэкранном режиме без чего-либо еще.
Первоначально Автор Карлос Сесса
Представьте, что вам нужно предоставить эту функцию в вашем приложении, и она должна быть совместима с любой версией Android. В этом разделе мы создадим простое приложение, которое будет иметь красный фон, и, когда мы его нажмем, приложение перейдет в режим отключения. Сначала мы позаботимся об Android 2.x и 3.x по отдельности, но потом мы объединим их в одну реализацию.
60 Android-хаков
Карлос Сесса 
Большинство игр или просмотрщиков изображений отображают весь экран. В этой статье, основанной на методике, представленной в 60 Android Hacks , автор показывает, как создать простое приложение, которое переходит в режим отключения при нажатии на фон. Лучше всего то, что он совместим между Android 2.x и 3.x.
Android 2.x
Сначала мы позаботимся о коде Android 2.x. В Android 2.x у нас есть концепция полноэкранного режима. Идея, стоящая за полноэкранным режимом, заключается в том, чтобы окно приложения могло использовать все пространство дисплея.
Нас также интересует другая концепция: название приложения. Название приложения — это серая полоса, которую мы видим в верхней части экрана. Вот код для создания эффекта:
Перечисление 1, Удаляющее название приложения в Android 2.x
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);                     #1
    setContentView(R.layout.main);
    mContentView = findViewById(R.id.content);
    mContentView.setOnClickListener(new OnClickListener() {            #2
        @Override
        public void onClick(View v) {
            Window w = getWindow();
            if(mUseFullscreen) {                                       #3
             w.addFlags(
             WindowManager.LayoutParams.FLAG_FULLSCREEN);
             w.clearFlags(
             WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
            } else {
             w.addFlags(
             WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
             w.clearFlags(
             WindowManager.LayoutParams.FLAG_FULLSCREEN);
            }
            mUseFullscreen = !mUseFullscreen;
       }
    });
}
Код не требует пояснений. В # 1 мы просим удалить строку заголовка. Это необходимо сделать до вызова setContentView (), и, к сожалению, это невозможно сделать динамически. В # 2 мы делаем общий вызов setContentView () и просим ссылку на корневой элемент нашего представления. Этот элемент будет работать как выключатель для полноэкранного режима.
В последней части кода указано, как должен работать полноэкранный режим. В # 3 вы можете увидеть, как переменная поля используется для переключения статуса.
Android 3.x
В Android 3.x концепции, объясненные для Android 2.x, немного различаются. Строка заголовка в конечном итоге представляет собой панель действий в верхней части экрана, а строка состояния — в нижней части экрана.
Важным изменением в Android 3.x является отсутствие физических кнопок; они все размещены в строке состояния. Из-за этого строка состояния не может быть отклонена, но она может быть затемнена. Вот код:
Перечисление 2, Затемняющее строку состояния в Android 3.x
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mContentView = findViewById(R.id.content);                         #1
    mContentView.setOnSystemUiVisibilityChangeListener(                #2
            new OnSystemUiVisibilityChangeListener() {
                public void onSystemUiVisibilityChange(int visibility) {
                    ActionBar actionBar = getActionBar();
                    if (actionBar != null) {
                        mContentView.setSystemUiVisibility(visibility);
                        if (visibility == View.STATUS_BAR_VISIBLE) {   #3
                            actionBar.show();
                        } else {
                            actionBar.hide();
                        }
                    }
                }
            });
    mContentView.setOnClickListener(new OnClickListener() {            #4
        public void onClick(View v) {
            if (mContentView.getSystemUiVisibility() ==
                View.STATUS_BAR_VISIBLE) {
                mContentView.setSystemUiVisibility(
                    View.STATUS_BAR_HIDDEN);
            } else {
                mContentView.setSystemUiVisibility(
                    View.STATUS_BAR_VISIBLE);
            }
        }
    });
}
Аналогично тому, что мы делали раньше, мы получаем ссылку на корневой элемент нашего представления в # 1. В Honeycomb представления имеют новый метод setOnSystemUiVisibilityChangeListener (). Это было создано, чтобы иметь место для получения обратных вызовов при изменении видимости системной панели. В # 2 я использовал этот метод, чтобы скрыть или показать панель действий в зависимости от параметра видимости, как вы можете видеть в # 3. В # 4 мы установили прослушиватель щелчков в корневом представлении, где мы переключаем видимость системного интерфейса, что в основном означает включение и выключение режима отключения.
Объединение обоих миров в одном действии
Мы показали, как работать с обоими сценариями в разных версиях Android, но было бы неплохо, если бы они были кросс-совместимы. Мы можем создать Activity, которая обрабатывает оба случая, но нам нужно сделать это с помощью оператора if, который проверяет версию Android.
Перечисление 3, Проверяющее версию Android
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {        #1
    configure3x();
} else {
  configure2x();
}
Для создания оператора if я использовал класс Build. Как видно из # 1, класс Build также имеет внутренний класс VERSION_CODES, который можно использовать для проверки версии, на которой работает устройство.
Резюме
Вы обнаружите, что все, что я сделал здесь, может быть сделано с использованием стилей. Это нормально, если вы не хотите динамически поддерживать эту функцию. Вы должны знать, что скрытие строки состояния запретит пользователю просматривать уведомления и может привести к тому, что пользователь закроет ваше приложение, чтобы посмотреть, что происходит. С другой стороны, использование режима отключения света в Android — это крутой способ погрузить пользователя в работу вашего приложения.
Вот некоторые другие названия Мэннинга, которые могут вас заинтересовать:
Android в действии, третье издание
 У. Фрэнк Эблсон, Роби Сен, Крис Кинг и К. Энрике Ортис Android на практике Чарли Коллинз, Майкл Д. Галпин и Матиас Кепплер Основы Objective-C Кристофер К. Фэрбэрн, Йоханнес Фаренкруг и Коллин Ruffenach