页面片段之间的Android ViewPager填充/边距

时间:2011-09-08 05:29:12

标签: android android-fragments android-viewpager

Android Market / Google Music似乎能够在ViewPager中包含的不同片段之间存在某种差距。

知道如何做到这一点?向实际片段视图添加边距/填充不起作用,因为视图仍然需要占据屏幕的整个宽度。只有在轻扫ViewPager时才能看到“间隙”。

7 个答案:

答案 0 :(得分:115)

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

setPageMargin(int marginPixels)
setPageMarginDrawable(Drawable)
setPageMarginDrawable(int)
ViewPager课程中的

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

如果您需要使用dip单位,您可以使用此方法:

public static int convertDip2Pixels(Context context, int dip) {
    return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, context.getResources().getDisplayMetrics());
}

答案 1 :(得分:22)

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

我希望 ViewPager CardView ,并且在填充和viewpager页面之间的边距方面存在问题。 setPageMargin对我来说根本不起作用。我不得不使用以下内容:

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

这使页面非常接近。

Example of the viewpager with a small margin between the pages.

答案 2 :(得分:4)

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

答案 3 :(得分:1)

pager.setClipToPadding(假); pager.setPadding(左,0,右,0); 如果在viewpager中需要两个页面之间的空格,则添加 pager.setPageMargin(INT);

答案 4 :(得分:1)

试试这个。

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

答案 5 :(得分:0)

试试这个

    viewPager.setClipToPadding(false);
    viewPager.setOffscreenPageLimit(2);
    viewPager.setPadding(20, 0, 20, 0);

答案 6 :(得分:0)

这是示例解决方案:

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

    @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();

    }

mTab​​Strip是活动或片段中的表格布局

@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;
}

最后,标题片段之间会有一个空白