TabLayout+ViewPager实现的底部导航栏自定义控件

每次开发基本都要写底部导航栏,于是自己用自己喜欢的方式(TabLayout+ViewPager)封装了一个简单的控件,方便以后直接拿来用,当然实现导航栏方式很多,这里只介绍这一种.

github地址:github.com/jie35688/MyNavigationBar

首先为了能够动态设置ViewPager的滑动,先简单自定义了一个Viewpager,提供动态设置方法,当然也提供了自定义属性isScroll.

private boolean isScroll =true;

public MyViewPager (Context context) { super(context); }

public MyViewPager (Context context, AttributeSet attrs) {

    super(context,attrs);

    TypedArray array=context.obtainStyledAttributes(attrs, R.styleable.MyViewPager);

    if(arry != null) {

          isScroll = array.getBoolean(R.styleable.MyViewPager_isScroll,true);

          array.recycle();

     }

}

public void setScrool(booleanb) { isScroll = b};

@Override

public boolean onTouchEvent(MotionEvent ev) {

    if(isScroll) { return super.onTouchEvent(ev);}

    return false;

}

onInterceptTouchEvent()方法也类似这样返回.

接着,回到正题,这个控件名叫NavigationBar,继承自Framelayout,提供了addFragment(),和addTab(),可在Activity等界面方便的添加不同的Fragment以及对应的导航tab,需要注意的是要先添加fragment,再添加tab,最后要记得调用一下initTab(),这样就完成了.

NavigationBar navigationBar = (NavigationBar) findViewById(R.id.navigation_bar);

//添加自己需要的fragment

navigationBar.addFragments(newFirstFragment());

navigationBar.addFragments(newSecondFragment());

//添加自己需要的tab,数量要对应于fragment的数量

navigationBar.addTab(LayoutInflater.from(this).inflate(R.layout.tab_main,null));

navigationBar.addTab(LayoutInflater.from(this).inflate(R.layout.tab_category,null));

navigationBar.initTab();//添加完后要initTab

NavigationBar的具体封装可以下载源码查看:github.com/jie35688/MyNavigationBar

    原文作者:沐沐小风
    原文地址: https://www.jianshu.com/p/6321341c86bf
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞