У меня была такая же проблема, и я решил ее с помощью простого обходного пути. Хотя я не мог найти теоретическую причину этого обходного пути, но он все равно сработал для меня.
Похоже, что при нажатии кнопки громкости «флаги», связанные с «режимом погружения», сбрасываются. И я думаю поэтому иммерсивный режим отключается и иммерсивный режим не восстанавливается автоматически.
Поэтому я попытался установить «флаги» после нажатия кнопки громкости с «запускаемым» объектом.
Итак, это работает так:
режим погружения -> нажата кнопка громкости (флаги очищены) -> через 500 мс исполняемый объект снова устанавливает флаги -> режим погружения восстановлен
<сильный>1. Сначала определите исполняемый объект, чтобы установить флаги
private Runnable decor_view_settings = new Runnable()
{
public void run()
{
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
};
<сильный>2. Отправьте исполняемый объект с некоторой задержкой в обработчик при нажатии кнопки громкости
private Handler mHandler = new Handler();
...
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK)
{
finish();
}
else if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP)
{
mHandler.postDelayed(decor_view_settings, 500);
}
return super.onKeyDown(keyCode, event);
}
Я просто задержал его на 500 мс без причины, это не важно.
<сильный>3. Базовый код для иммерсивного режима с запускаемым объектом
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
if(hasFocus)
{
mHandler.post(decor_view_settings);
}
}
Он отлично работал в моем приложении.
Итак, когда я нажимаю кнопку громкости, режим погружения отключается и появляется качелька громкости.
через несколько секунд качелька громкости исчезает, а также строка состояния и панель навигации.
Надеюсь, эта работа для вас.
person
Sangseok
schedule
21.01.2014