Полноэкранная активность не стабильна при отображении / скрытии пользовательского интерфейса - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь получить ViewPager с некоторыми элементами пользовательского интерфейса, которые отображаются / скрываются по требованию для приложения типа eReader. У меня проблема в том, что мои ViewPager размеры меняются в зависимости от того, показывает системный интерфейс или нет. Я просмотрел много примеров и попробовал много разных реализаций, но не могу заставить ViewPager игнорировать системные изменения пользовательского интерфейса. Я мог бы обойти обходной путь, но я надеялся, что у кого-то есть идея, что я делаю неправильно.

Мой макет (упрощенный):
<FrameLayout> <ViewPager/> <FrameLayout ... android:fitsSystemWindows="true"> <ConstraintLayout> <include layout="@layout/app_bar"/> <include layout="@layout/bottom_bar"/> <FloatingActionButton ... /> ... </ConstraintLayout> </FrameLayout> </FrameLayout>

Моя деятельность (упрощенно):

public class BookActivity {
    protected void onCreate(...) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.book_activity);
        ...
        viewPager.getViewTreeObserver().addOnGlobalLayoutListener(new 
            ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {              
viewPager.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                //do something with viewpager
                //viewpager dimensions should stay the same regardless of system ui status
            }
        });
        //hide the system ui on start
        hideSystemUI();
    }

    private void hideSystemUI() {
         View decorView = getWindow().getDecorView();
         decorView.setSystemUiVisibility(
                 View.SYSTEM_UI_FLAG_IMMERSIVE
                    // Set the content to appear under the system bars so that the
                    // content doesn't resize when the system bars hide and show.
                    | 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
                    | View.SYSTEM_UI_FLAG_LOW_PROFILE);
    }
    private void showSystemUI() {
         View decorView = getWindow().getDecorView();
         decorView.setSystemUiVisibility(
                 View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LOW_PROFILE);
    }
}

После возвращения пользовательского интерфейса системы размеры ViewPager уменьшаются по высоте. Я думал, что SYSTEM_UI_FLAG_LAYOUT_STABLE и SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN должны были предотвратить это.

...