Я настраиваю режим "выключен" для моего приложения Android, когда он работает на последних телефонах и планшетах. В моем методе onCreate() я добавил:
View rootView = getWindow().getDecorView();
rootView.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); // aka View.SYSTEM_UI_FLAG_LOW_PROFILE
это работает лучше, чем я думал. На моем планшете Android 3.2 панель состояния запускается в режиме низкого профиля (все кнопки на панели заменены точками). Если я взаимодействую с кнопками на панели, он станет нормальным, а затем вернется в низкопрофильный режим (например, если я проверю окно конфигурации/уведомлений в строке состояния). Таким образом, похоже, что это больше свойство моего приложения, чем "команда", чтобы напрямую скрыть интерфейс.
Есть два угловых случая, которые не обрабатываются. Во-первых, если пользователь удаляет строку состояния, не нажимая ни на одну из точек, панель становится активной. Он никогда не возвращается в режим низкого профиля, пока пользователь фактически не взаимодействует с чем-либо на панели (например, смотрит на уведомления или снимает снимок экрана). Итак, если они вернутся к взаимодействию с моим приложением, строка состояния больше не находится в режиме низкого профиля. (У приложения Gallery также есть эта проблема, поэтому, возможно, это не только я.) Второй краевой случай - это возобновление с экрана блокировки. Если я нажму кнопку питания, чтобы заблокировать планшет, затем откройте его и возобновите приложение, строка состояния будет полностью видимой (и взаимодействие с ней ничего не изменит). (Приложение Gallery не имеет этой проблемы.)
Несколько сообщений в блогах предполагают, что я могу настроить обработчик для прослушивания изменений видимости системного интерфейса, а затем снова скрыть пользовательский интерфейс, если он станет видимым. Вот так:
rootView.setOnSystemUiVisibilityChangeListener(
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (visibility == View.STATUS_BAR_VISIBLE) {
game.flagUIIsVisible();
}
}
});
В моем случае метод объекта game
просто устанавливает флаг, указывающий, что пользовательский интерфейс стал невидимым. Позже, если в моем приложении есть какие-либо сенсорные события (они обрабатываются одним и тем же объектом game
), и этот флаг установлен, я снова вызываю вызов STATUS_BAR_HIDDEN.
Однако при этих обратных вызовах нет видимого воздействия на пользовательский интерфейс. Я вижу, что правый обработчик вызывается из некоторых сообщений журнала, и я вижу, что вызывающий вызывает вызов.
Я также попытался вызвать вызов STATUS_BAR_HIDDEN в моем пути onResume
, но это тоже не помогло.
Я ищу информацию о том, что это какая-то известная ошибка или подсказки для того, что может делать приложение Gallery (предполагая, что оно делает что-то по-другому). Или предложения для других API-интерфейсов, чтобы попробовать (или другие детали, которые могут быть релевантными).
Я использую libGDX, и мое приложение имеет только один вид, поэтому его довольно просто. Представление также настроено на полноэкранный режим без заголовка libGDX. В моем манифесте установлено, что у моего целевого объектаSdkVersion установлено значение 15.