web-dev-qa-db-fra.com

Android Remplissage / marge ViewPager entre les fragments de page

Android Market/Google Music semblent pouvoir avoir un certain écart entre les différents fragments contenus dans le ViewPager.

Une idée de comment cela se fait? L'ajout de marge/remplissage à la vue de fragment réelle ne fonctionne pas, car la vue doit toujours occuper toute la largeur de l'écran. L'écart n'est visible que lorsque vous faites glisser le ViewPager.

56
psychotik

Dans Support Package, r4 vous pouvez utiliser ces méthodes:

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

dans ViewPager classe.

Je ne sais pas pourquoi cela n'a pas d'équivalent en XML :-(

Si vous avez besoin d'utiliser l'unité d'immersion, vous pouvez utiliser cette méthode:

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

En espérant que cela pourrait aider quelqu'un avec un ViewPager et des marges de page.

Je voulais avoir un ViewPager est un CardView et j'ai eu des problèmes avec le le rembourrage et la marge entre les pages du viseur. Le setPageMargin ne fonctionnait pas du tout pour moi. J'ai dû utiliser ce qui suit:

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

Cela permet aux pages d'être très rapprochées.

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

22
Ray Hunter
  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));
 }
4
Anirudh

Essaye ça .

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

pager.setClipToPadding (false); pager.setPadding (gauche, 0, droite, 0); Si vous avez besoin d'espace entre deux pages dans le viewpager, ajoutez pager.setPageMargin (int);

1
RAHULRSANNIDHI

Essaye ça

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

voici un exemple de solution:

implémenter le ViewPager.OnPageChangeListener dans votre activité ou votre fragment où vous utilisez le 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 est la disposition du tableau dans votre activité ou fragment

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

vous aurez enfin une marge entre vos fragments de titre

0
Chakib Temal