Android自定义下方导航Tab

转载注明出处chendong_


基本大多数应用都会使用底部Tab的导航方式,实现底部Tab导航的方式很多,之前有TabHost,现在有TabLayout,之前一直用的是LinearLayout嵌套的方式或者RadioGroup,但是都相对麻烦,所以自定义了一个控件可以更方便的实现底部tab导航。

GitHub源码地址


TabHolder

compile ‘com.march.tabholder:tabholder:1.0.2’

更新日志

版本1.0.1(2016.3.29) 可以使用图片在左边,文字在右边;图片在上边,文字在下面两种模式;可以显示或者去除分割线;可以显示或者不显示文字

版本1.0.2(2016.3.29) 实现与ViewPager联动

android progressbar 自定义动画 android 自定义tab_分割线

在xml文件中使用

<com.march.tabholder.TabHolder
        android:id="@+id/activity_tab_test_tabholder"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#ddd"
        //没有被选中时文字颜色
        app:TabHolderNormalColor="#567"
        //选中时文字颜色
        app:TabHolderSelectColor="#00f"
        //显示的类型,horizontal表示图片在文字左边,vertical表示图片在文字下边
        app:TabHolderType="horizontal"
        //是否显示文字
        app:TabHolderWithText="true"
        //是否显示分割线
        app:TabHolderWithDivider="true"
        />

初始化

TabHolder mTabHolder = (TabHolder) findViewById(.activity_tab_test_tabholder);

//添加tab
mTabHolder.addTab(R.drawable.camera_filter, R.drawable.camera_filter_press, "滤镜")
                .addTab(R.drawable.camera_record, R.drawable.camera_record_press, "记录")
                .addTab(R.drawable.camera_sticker, R.drawable.camera_sticker_pressed, "贴纸")
                .addTab(R.drawable.camera_sticker, R.drawable.camera_sticker_pressed, "贴纸");

//设置监听事件
mTabHolder.setOnItemSelectListener(new TabHolder.OnItemSelectListener() {
            @Override
            public void OnItemSelect(int preSelect, int currentSelect, TabView preView, TabView currentView) {
                Log.e("chendong", "上一个选择是  " + preSelect + "   当前选择是  " + currentSelect);
            }
});

与ViewPager联动

//给TabHolder设置ViewPager,是否平滑移动,监听
mTabHolder.setViewPager(vp, false, new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

APi

//停止自动切换,在使用下面的方法时会造成与自动切换的冲突,建议停用
public void setAutoToogle(boolean autoToogle)
//选中一个
public void select(int pos)
//不选中一个
public void unselect(int pos)
//切换一个
public void toogle(int pos)
//选中一个,上一个被选中的会置为不选中
mTabHolder.singleSelect(0)