我可以设置viewpager的项目宽度吗?

时间:2012-04-16 02:32:25

标签: android android-widget

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

2 个答案:

答案 0 :(得分:8)

快速回答

您想要的是覆盖getPageWidth PagerAdapterViewPager实施的内容0.8f

例如,将其设置为@Override public float getPageWidth(final int position) { return 0.8f; } 将使单个页面仅覆盖视图页面宽度的80%,以便下一页和/或上一页的部分可见。

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

https://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)

的更多信息

其他评论

另请注意,负边距仅会导致单独的页面相互重叠。边距用于定义每个页面之间的空间。

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

代码示例

可以在https://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html

找到可能的概述

布局中的视图寻呼机

// 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;
    }
});

内联配置的Adapter实现的示例,这将在onCreate或onViewCreated方法中进行:

{{1}}

基于https://newfivefour.com/android-viewpager-simple-views.html

的示例代码

答案 1 :(得分:3)

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

或者,你可以看一下使用Gallery代替,虽然我不得不承认我不是他们的忠实粉丝,因为他们似乎不那么灵活,而且有更多的错误。