6

I hope I can show 3 items in a page of viewpager, but now I only could set viewpager's padding value and margin value, so it only show one item in a page of viewpager. How can I set the item width? I think if I can set more little width of item, the viewpager will show more items in a page.

4

2 に答える 2

21

素早い回答

getPageWidth必要なのは、そのために作成したPagerAdapter実装でオーバーライドすることViewPagerです。

たとえば0.8f、次のページや前のページの一部が表示されるように、1 つのページが viewpager の幅の 80% のみをカバーするように設定します。

@Override
public float getPageWidth(final int position) {
    return 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にあります。

レイアウト内のビュー ページャー

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

インラインで構成された Adapter 実装の例。これは 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に基づくコード例

于 2017-01-04T13:11:49.540 に答える
3

ページ マージンを負の値に設定しようとしましたsetPageMargin(int)か?を参照してください。私の記憶が正しければ、あなたがそのように説明していることに似た何かに気づいた人を読んだことがあります。

または、代わりにa を使用することもできますが、Gallery柔軟性が低く、バグが多いように見えるため、私はそれらの大ファンではないことを認めなければなりません。

于 2012-04-16T02:40:38.790 に答える