Я застрял в забавной проблеме.Мне нужно скрыть навигацию и строку состояния в моем приложении.После нескольких неудачных попыток макета кодирования xml
я сделал это с помощью кода следующим образом:
private void setVisibilityOptions() {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| 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);
}
Я вызываю это в onResume()
обработчик событий, потому что Activity получен из AppCompatActivity
и онработает.Самое смешное происходит, когда появляется меню приложения.Это немедленно запускает систему для отображения навигации и строки состояния.Затем, если я выберу в меню пункт, который повторно инициирует событие возобновления, я в безопасности, и строки состояния и навигации снова будут скрыты, но если я не выберу пункт меню, они будут там стоять (с ужасным графическим эффектом среди прочего).Я пытался использовать onOptionsItemSelected
обработчики событий, но, конечно, это не срабатывает, если ни один элемент не выбран.onOptionsMenuClosed
вообще не срабатывает.Я добавляю макет меню и раздел панели инструментов для справки:
Меню:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="xxx.MainActivity">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
<item
android:id="@+id/action_drivers"
android:orderInCategory="100"
android:title="@string/action_drivers"
app:showAsAction="never" />
<item
android:id="@+id/action_controller"
android:orderInCategory="100"
android:title="@string/select_controller_title"
app:showAsAction="never" />
<item
android:id="@+id/action_map"
android:orderInCategory="100"
android:title="@string/map_title"
app:showAsAction="never" />
<item
android:id="@+id/action_telemetry"
android:orderInCategory="100"
android:title="@string/telemetry_title"
app:showAsAction="never" />
</menu>
Панель приложений:
<android.support.design.widget.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay" >
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
Кстати.Основное действие происходит от AppCompatActivity
, и это не в состоянии вызвать WindowsFocusChanged
события.Как я могу это исправить?Можно ли поймать событие при закрытии меню?