Скрыть инструменты и строку заголовка при переходе между общими элементами действия

#android #android-layout #android-actionbar #transition #android-immersive

Вопрос:

Запрос клиента:

Я хочу создать плавный переход между всеми действиями, переместив 2 элемента png моего фона (запрос клиента). Подробно: у меня есть правый элемент, который должен переместиться влево на 20 секунд, и элемент miror слева, который должен переместиться вправо.

Мой текущий код:

Переход выглядит хорошо, для этого я создал 2 общих элемента с одним и тем же «Именем перехода» во всем макете моей деятельности:

 android:transitionName="transitionLeft"
 

В своем манифесте я задал свой собственный стиль:

     <application
    android:allowBackup="true"
    android:fullBackupContent="@xml/backup_descriptor"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
 

В моем «res/values/style.xml» Я установил windowsContentTransitions в значение true:

 <!-- Activity theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowContentTransitions">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
</style>
 

И, безусловно, во всей моей деятельности в начале onCreate() Я добавил:

 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
 

Во всех действиях на onWindowFocusChanged() Я установил SYSTEM_UI_FLAG_FULLSCREEN:

 @Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        getWindow().getDecorView().setSystemUiVisibility(
            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
                    // Hide the nav bar and status bar
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);
        
    }
}
 

Моя проблема:

Когда я открываю действие, переход уже запущен, но я всегда видел кратковременное исчезновение в строке инструментов и заголовка, и я не хочу, чтобы оно было. Но, на мой взгляд, я сделал все, чтобы уже скрыть эти полосы, но это не сработает нормально.

Ответ №1:

Я нахожу решение: Проблема связана с моим приложением, которое находится в полноэкранном режиме. Поэтому, чтобы заблокировать статус и навигационную панель, вы должны установить DecorView.setSystemVisibility в SYSTEM_UI_FLAG_IMMERSIVE_STICKY в начале onCreate, например:

 getWindow().getDecorView().setSystemUiVisibility(
            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);
 

С этим я больше никогда не увижу навигацию и строку состояния