63

Android Market/Google Music 似乎能够在ViewPager.

知道这是怎么做到的吗?向实际的片段视图添加边距/填充不起作用,因为视图仍然需要占据屏幕的整个宽度。“间隙”仅在滑动 ViewPager 时可见。

4

7 回答 7

128

Support Package, r4中,您可以使用以下方法:

setPageMargin(int marginPixels)
setPageMarginDrawable(Drawable)
setPageMarginDrawable(int)

ViewPager类中。

我不知道为什么这在 XML 中没有等价物:-(

如果您需要使用倾角单元,您可以使用此方法:

public static int convertDip2Pixels(Context context, int dip) {
    return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, context.getResources().getDisplayMetrics());
}
于 2011-11-01T21:11:43.503 回答
24

希望这可以帮助有ViewPager和页边距的人。

我想让ViewPagerCardView并且在 viewpager 页面之间的填充和边距存在问题。setPageMargin 根本不适合我。我不得不使用以下内容:

int pagerPadding = 16;
pager.setClipToPadding(false);
pager.setPadding(pagerPadding, 0, pagerPadding, 0);

这允许页面非常靠近。

页面间距较小的 viewpager 示例。

于 2015-11-17T21:57:41.143 回答
7
  viewPager.setPageMargin(dpToPx(10)); 
  // replace 10 with the value you want for margin in dp. 


 public int dpToPx(int dp) {
    DisplayMetrics displayMetrics = getActivity().getResources().getDisplayMetrics();
    return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
 }
于 2017-04-11T10:54:05.820 回答
5

尝试这个 。

    ViewPager viewPager = (ViewPager) findViewById(R.id.h_view_pager);
    viewPager.setClipToPadding(false);
    viewPager.setPadding(60, 0, 60, 0);
    viewPager.setPageMargin(20);
    ImagePagerAdapter adapter = new ImagePagerAdapter();
    viewPager.setOffscreenPageLimit(adapter.getCount());
    viewPager.setAdapter(adapter);
于 2016-11-21T11:43:25.630 回答
2

pager.setClipToPadding(false); pager.setPadding(left,0,right,0); 如果您需要 viewpager 中两个页面之间的空间,请添加 pager.setPageMargin(int);

于 2016-09-29T11:28:52.947 回答
1

尝试这个

    viewPager.setClipToPadding(false);
    viewPager.setOffscreenPageLimit(2);
    viewPager.setPadding(20, 0, 20, 0);
于 2017-10-02T17:12:03.823 回答
0

这是一个示例解决方案:

ViewPager.OnPageChangeListener在您使用的活动或片段中实现ViewPager

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        int tabStripChildCount = mTabStrip.getChildCount();

        for (int i=0 ; i < tabStripChildCount ; i++){
            View view = mTabStrip.getChildAt(i);

            ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
            p.setMargins(0, 0, 50, 0);
            view.requestLayout();
        }
    }

mTabStrip 是您的活动或片段中的表格布局

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
    View view =  inflater.inflate(R.layout.patient_activity__fragment_tab_viewer, container, false);

    mViewPager = (ViewPager) view.findViewById(R.id.viewPager); 
    mViewPager.setAdapter(mSectionsPagerAdapter);

    mTabStrip = (SlidingTabLayout) view.findViewById(R.id.tabs);

    mTabStrip.setViewPager(mViewPager);
    return view;
}

最后,您的标题片段之间将有一个边距

于 2019-06-19T11:46:26.950 回答