效果如图:
布局文件:
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="@dimen/x100" android:layout_below="@+id/rl_count" android:background="@color/color_bg" android:elevation="6dp" android:minHeight="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:tabSelectedTextColor="@color/text_color" app:tabTextColor="@color/text_color" /> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/tab_layout" /> </RelativeLayout>
Java代码:
private void initView() { TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); tabLayout.addTab(tabLayout.newTab().setText("艾艾贴")); tabLayout.addTab(tabLayout.newTab().setText("周边产品")); tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); final OrderInfoAdapter adapter = new OrderInfoAdapter (getSupportFragmentManager(), tabLayout.getTabCount()); final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); }
Adapter:
/** * Created by xiaoMan on 2017/1/16. * Email:1635401972@qq.com * Details: */ public class OrderInfoAdapter extends FragmentStatePagerAdapter { int mNumOfTabs; public OrderInfoAdapter(FragmentManager fm, int NumOfTabs) { super(fm); this.mNumOfTabs = NumOfTabs; } @Override public Fragment getItem(int position) { switch (position) { case 0: OrderInfoFragment tab1 = new OrderInfoFragment(); return tab1; case 1: PlaceOrderRimProductFragment tab2 = new PlaceOrderRimProductFragment(); return tab2; default: return null; } } @Override public int getCount() { return mNumOfTabs; } }
这样就OK了。
然后ScrollView与ViewPager冲突解决办法(自定义ViewPager):
/** * Created by xiaoMan on 2017/1/13. * Email:1635401972@qq.com * Details:此类用来解决ScrollView嵌套ViewPager冲突 */ public class ChildViewPager extends ViewPager { /** * 触摸时按下的点 **/ PointF downP = new PointF(); /** * 触摸时当前的点 **/ PointF curP = new PointF(); OnSingleTouchListener onSingleTouchListener; public ChildViewPager(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public ChildViewPager(Context context) { super(context); // TODO Auto-generated constructor stub } @Override public boolean onInterceptTouchEvent(MotionEvent arg0) { // TODO Auto-generated method stub //当拦截触摸事件到达此位置的时候,返回true, //说明将onTouch拦截在此控件,进而执行此控件的onTouchEvent return true; } @Override public boolean onTouchEvent(MotionEvent arg0) { // TODO Auto-generated method stub //每次进行onTouch事件都记录当前的按下的坐标 curP.x = arg0.getX(); curP.y = arg0.getY(); if (arg0.getAction() == MotionEvent.ACTION_DOWN) { //记录按下时候的坐标 //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变 downP.x = arg0.getX(); downP.y = arg0.getY(); //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } if (arg0.getAction() == MotionEvent.ACTION_MOVE) { //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } if (arg0.getAction() == MotionEvent.ACTION_UP) { //在up时判断是否按下和松手的坐标为一个点 //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick if (downP.x == curP.x && downP.y == curP.y) { onSingleTouch(); return true; } } return super.onTouchEvent(arg0); } /** * 单击 */ public void onSingleTouch() { if (onSingleTouchListener != null) { onSingleTouchListener.onSingleTouch(); } } /** * 创建点击事件接口 * * @author wanpg */ public interface OnSingleTouchListener { public void onSingleTouch(); } public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) { this.onSingleTouchListener = onSingleTouchListener; } }
好了,没了 ==