Скрытие панели навигации после отображения меню на API> 24 - PullRequest
0 голосов
/ 07 июня 2019

Я застрял в забавной проблеме.Мне нужно скрыть навигацию и строку состояния в моем приложении.После нескольких неудачных попыток макета кодирования 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 события.Как я могу это исправить?Можно ли поймать событие при закрытии меню?

1 Ответ

0 голосов
/ 07 июня 2019

А как насчет onPrepareOptionsMenu?Perharps, вы могли бы назвать свой setVisibilityOptions() там.

Таким образом, теоретически onPrepareOptionsMenu get вызывается, навигация и строка состояния становятся видимыми, но затем вы вызываете setVisibilityOptions(), поэтому они снова становятся невидимыми, и, надеюсь, это происходит слишком быстро, чтобы пользователь мог это заметить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...