2012-04-16 85 views
2

我希望我可以在viewpager的页面中显示3个项目,但现在我只能设置viewpager的填充值和边距值,因此它只在viewpager的页面中显示一个项目。我如何设置项目宽度?我认为如果我可以设置更多的项目宽度,viewpager会在页面中显示更多项目。我可以设置viewpager的项目宽度吗?

回答

3

您是否尝试将页边距设置为负值,请参阅setPageMargin(int)?如果我没有记错的话,我会阅读某人意识到类似于你这样描述的东西。

或者,你可以看看使用代替一个Gallery,虽然我不得不承认我不是他们的忠实粉丝,因为他们似乎是不太灵活,更马车。

+0

感谢您的回答,我会尝试。我无法使用图库,因为我需要向父视图添加列表,图库对此有一些问题。 – 2012-04-16 05:09:47

+0

谢谢,它是由你的理想实现的。 – 2012-04-16 09:43:10

+0

这会导致部分幻灯片不可触及,因为它们之前的项目与它们重叠 – 2017-12-14 16:25:24

4

快速解答

你想在你为ViewPager作出PagerAdapter实现覆盖getPageWidth什么。

例如,将其设置为0.8f将使单个页面仅覆盖视图页面宽度的80%,以便可以看到下一页和/或先前页面的一部分。在https://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)

其他说明

@Override 
public float getPageWidth(final int position) { 
    return 0.8f; 
} 

更多信息,还要注意的是负利润,只会导致单独的页面,以相互重叠。边距用于定义每个页面之间的空间。

如果没有替代pageWidth配置(没有setter,只有覆盖),它将默认覆盖100%,除非被拖动,否则不会显示其他页面的部分。

代码示例

A的什么是可能的非常好的概述可以在这里https://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html

视图寻呼机发现你的布局内嵌配置适配器实现的

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</android.support.v4.view.ViewPager> 

的例子,这进入onCreate或onViewCreated方法:

// get a reference to the viewpager in your layout 
ViewPager mViewPager = (ViewPager) findViewById(R.id.viewpager); 
// this margin defines the space between the pages in the viewpager mViewPager.setPageMargin(context.getResources().getDimensionPixelSize(R.dimen.margin_normal)); 
// setting the adapter on the viewpager, this could/should be a proper Adapter implementation in it's own class file instead 
mViewPager.setAdapter(new PagerAdapter() { 

    // just example data to show, 3 pages 
    String[] titles = {"Eins", "Zwei", "Drei"}; 
    int[] layouts = {R.layout.layout1, R.layout.layout2, R.layout.layout3}; 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     LayoutInflater inflater = LayoutInflater.from(MainActivity.this); 
     // here you can inflate your own view and dress up 
     ViewGroup layout = (ViewGroup) inflater.inflate(layouts[position], container, false); 
     container.addView(layout); 
     return layout; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((View)object); 
    } 

    @Override 
    public float getPageWidth(final int position) { 
     return 0.8f; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return titles[position]; 
    } 

    @Override 
    public int getCount() { 
     return layouts.length; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 
}); 

基于https://newfivefour.com/android-viewpager-simple-views.html的示例代码

+0

commonsware链接(第二个)确实有帮助! – 2017-11-08 18:27:55