我可以设置viewpager的item宽度吗?

问题描述 投票:0回答:3

我希望在viewpager的一个页面中可以显示3个项目,但是现在我只能设置viewpager的padding值和margin值,所以在viewpager的页面中只能显示一个项目。如何设置项目宽度?我想如果我可以设置更小的项目宽度,viewpager 将在页面中显示更多项目。

android android-widget
3个回答
22
投票

快速解答

您想要的是在您为此所做的

getPageWidth
实现中覆盖
PagerAdapter
例如,将其设置为 

ViewPager

将使单个页面仅覆盖 viewpagers 宽度的 80%,以便下一页和/或上一页的部分可见。

0.8f

更多信息请访问 
https://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)

其他备注

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

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

代码示例

可以在这里找到有关可能性的非常好的概述

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

布局中的视图寻呼机

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

内联配置的适配器实现示例,这将出现在 onCreate 或 onViewCreated 方法中:

<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://new Fivefour.com/android-viewpager-simple-views.html


3
投票

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

?如果我没记错的话,我读到有人意识到了与你所描述的类似的事情。
或者,你可以看看使用

setPageMargin(int)

 来代替,尽管我不得不承认我不是它们的忠实粉丝,因为它们似乎不太灵活并且有更多错误。


0
投票
Gallery

设置为 3

    

© www.soinside.com 2019 - 2024. All rights reserved.