Я пытаюсь получить 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
должны были предотвратить это.