在重建Activity之前,保存ViewPager2的布局尺寸并在重建后进行恢复。
示例代码:
private int viewPagerWidth = 0; private int viewPagerHeight = 0;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
ViewPager2 viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(...);
// 记录ViewPager2的布局尺寸
viewPager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
viewPagerWidth = viewPager.getWidth();
viewPagerHeight = viewPager.getHeight();
// 只监听一次,然后移除监听器
viewPager.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("viewPagerWidth", viewPagerWidth); outState.putInt("viewPagerHeight", viewPagerHeight); }
@Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); viewPagerWidth = savedInstanceState.getInt("viewPagerWidth"); viewPagerHeight = savedInstanceState.getInt("viewPagerHeight");
// 恢复ViewPager2的布局尺寸
if (viewPagerWidth != 0 && viewPagerHeight != 0) {
viewPager.setLayoutParams(new LinearLayout.LayoutParams(viewPagerWidth, viewPagerHeight));
}
}