Android ViewPager 根据屏幕大小显示多个片段

jyo*_*Pro 2 android android-fragments android-viewpager

一个如何根据屏幕大小Fragment在a中显示多个s ViewPager;如果是小型设备,它会Fragment在一个屏幕上显示 1 。如果它是横向模式的平板电脑,它会Fragment在一个屏幕上显示 2 个,并排显示。如果是纵向模式的平板电脑,它会显示 1 Fragment?

Cyb*_*rEd 6

在 ViewPagerAdapter 类中,覆盖 getPageWidth()。它返回一个浮点数(默认值为 1),其中包含每个页面应占用的空间量。例如,将此值更改为 .5f 将使两个片段出现在同一窗口中。

@Override public float getPageWidth(int position) {
    return(1f/simultaneousPages);
}
Run Code Online (Sandbox Code Playgroud)

此外,应该增加 setOffscreenPageLimit() 。它的默认值为 1,这意味着现在我们显示两个页面,后台将没有足够的片段加载到内存中。作为一般规则,这应该是每个屏幕上页面数量的两倍。

在 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);
}
Run Code Online (Sandbox Code Playgroud)

要根据屏幕大小更改视图,只需根据需要更改 concurrentPages 变量即可。有关检测物理屏幕尺寸的更多信息。

注意:此方法会导致 PagerTitleStrip 和 PagerTabStrip 出现问题。显示为选定的“当前选项卡”将显示为视图中最左侧的任何片段。

替代解决方案和更多信息。