web-dev-qa-db-ja.com

Android ViewPagerのページフラグメント間のパディング/マージン

Androidマーケット/ Googleミュージックでは、ViewPagerに含まれるさまざまなフラグメント間に何らかのギャップを設けることができるようです。

これがどのように行われるか考えていますか?ビューが画面の幅全体を占有する必要があるため、実際のフラグメントビューにマージン/パディングを追加しても機能しません。 「ギャップ」は、ViewPagerをスワイプしたときにのみ表示されます。

56
psychotik

サポートパッケージ、r4 では、次のメソッドを使用できます。

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

in ViewPager クラス。

私はこれがXMLで同等のものを持たない理由がわかりません:-(

ディップユニットを使用する必要がある場合は、次の方法を使用できます。

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

これが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.

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

これを試して 。

    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(left、0、right、0);ビューページャーの2つのページ間にスペースが必要な場合は、pager.setPageMargin(int);を追加します。

1
RAHULRSANNIDHI

これを試して

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

サンプルソリューションを次に示します。

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
Chakib Temal