Android ViewPager отступ / поле между фрагментами страницы - PullRequest
55 голосов
/ 08 сентября 2011

Android Market / Google Music, похоже, могут иметь какой-то промежуток между различными фрагментами, содержащимися в ViewPager.

Есть идеи, как это сделать?Добавление полей / отступов к фактическому фрагментному представлению не работает, потому что представление все еще должно занимать всю ширину экрана.«Пробел» виден только при перелистывании ViewPager.

Ответы [ 7 ]

116 голосов
/ 02 ноября 2011

В Пакет поддержки, 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());
}
22 голосов
/ 18 ноября 2015

Надеясь, что это может помочь кому-то с ViewPager и полями страницы.

Я хотел, чтобы ViewPager представлял собой CardView , и у него были проблемы с заполнением и полем между страницами окна просмотра. SetPageMargin у меня вообще не работал. Я должен был использовать следующее:

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

Это позволяет страницам быть очень близко друг к другу.

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

4 голосов
/ 11 апреля 2017
  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));
 }
2 голосов
/ 21 ноября 2016

Попробуйте это.

    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);
1 голос
/ 29 сентября 2016

pager.setClipToPadding (ложь);pager.setPadding (слева, 0, вправо, 0);Если вам нужно пространство между двумя страницами в окне просмотра, добавьте pager.setPageMargin (int);

0 голосов
/ 19 июня 2019

Вот пример решения:

реализует 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;
}

В конце концов вы будете иметь разницу между фрагментами вашего заголовка

0 голосов
/ 02 октября 2017

Попробуйте это

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