【发布时间】:2014-05-10 16:13:58
【问题描述】:
如何根据屏幕大小在一个ViewPager中显示多个Fragments;如果是小型设备,它会在一个屏幕上显示 1 Fragment。如果它是横向模式的平板电脑,它会在一个屏幕上显示 2 个Fragment,彼此相邻。如果是纵向模式的平板电脑,会显示 1 Fragment?
【问题讨论】:
标签: android android-fragments android-viewpager
如何根据屏幕大小在一个ViewPager中显示多个Fragments;如果是小型设备,它会在一个屏幕上显示 1 Fragment。如果它是横向模式的平板电脑,它会在一个屏幕上显示 2 个Fragment,彼此相邻。如果是纵向模式的平板电脑,会显示 1 Fragment?
【问题讨论】:
标签: android android-fragments android-viewpager
在您的 ViewPagerAdapter 类中,覆盖 getPageWidth()。它返回一个浮点数(默认值为 1),其中包含每个页面应占用的空间量。例如,将此值更改为 .5f 将使两个片段出现在同一个窗口中。
@Override public float getPageWidth(int position) {
return(1f/simultaneousPages);
}
另外,setOffscreenPageLimit() 应该增加。它的默认值为一个,这意味着现在我们显示了两个页面,在后台将没有足够的片段加载到内存中。作为一般规则,这应该是每个屏幕上页面数量的两倍。
在 MainActivity.java(或任何使用您的 ViewPagerAdapter 的活动)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the view from activity_main.xml
setContentView(R.layout.activity_main);
// Locate the viewpager in activity_main.xml
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
// Set the ViewPagerAdapter into ViewPager
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
// Load extra pages into memory for smooth transitions
viewPager.setOffscreenPageLimit(2*simultaneousPages);
}
要根据屏幕大小更改视图,只需根据需要更改 concurrentPages 变量。 More on detecting physical screen sizes.
注意:此方法会导致 PagerTitleStrip 和 PagerTabStrip 出现问题。显示为选中的“当前选项卡”将显示为您视图中最左侧的任何片段。
【讨论】: