Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

easilycoder/VerticalTabLayout

Repository files navigation

VerticalTabLayout & VerticalViewPager

纵向布局的TabLayout和纵向切换的ViewPager

实现方案

VerticalTabLayout

参考了GitHub上这个开源项目VerticalTabLayout以及官方的TabLayout的实现,大部分代码拷贝于官方的TabLayout的源码实现。作出了以下的几点修改

  • 新增了ViewPagerTabItemCreator,支持在绑定ViewPager的时候使用自定义的TabItem视图。

    public interface ViewPagerTabItemCreator {	
    	VerticalTab create(int position);
    }

    对应的使用的代码块为

    private void populateFromPagerAdapter(ViewPagerTabItemCreator creator) {
     removeAllTabs();
     if (mPagerAdapter != null) {
     final int adapterCount = mPagerAdapter.getCount();
     for (int i = 0; i < adapterCount; i++) {
     String title = mPagerAdapter.getPageTitle(i) == null ? "tab" + i : mPagerAdapter.getPageTitle(i).toString();
     if(creator!=null){
     addTab(creator.create(i), false);
     }else {
     addTab(newTab().setText(title),false);
     }
     }
     if (mViewPager != null && adapterCount > 0) {
     final int curItem = mViewPager.getCurrentItem();
     if (curItem != getSelectedTabPosition() && curItem < getTabCount()) {
     selectTab(getTabAt(curItem));
     }
     }
     }
     }
  • 更改了官方的TabLayou的自定义view的使用策略(官方的自定义tabiten的样式是受限制的,要有固定id的ImageView和固定id的TextView),添加了新的接口

    public interface OnCustomTabViewRenderListener {
     /**
     * 当需要tab的item需要自定义view的时候,通过这个接口方法通知视图渲染
     *
     * @param tab
     */ 
    	void onRender(VerticalTab tab);
    }
  • Tab更换为VerticalTab

  • 修改实现的TabView

除此之外,逻辑基本保持与官方的TabLayout一致

VerticalViewPager

垂直切换的ViewPager提供了两种常规方案:

  • 基于ViewPager.PageTransformer实现。会存在嵌套recyclerview的滑动冲突问题

  • 修改ViewPager的源码,做对应的修改。可以看这个项目InfiniteCycleViewPager

方案使用

不管是VerticalTabLayout还是VerticalViewPager,两者的使用方法都与官方的使用API和方法一致。对于VerticalTabLayout存在的差异有

  • 不支持在xml文件中嵌套使用TabItem添加tab
  • setupWithViewPager()可以携带一个接口对象,用于自定义tab的视图
  • xml中支持定义的属性不同,详情可以参考attrs.xml当中的定义

具体可以参考demo

实现效果

About

a simple lib providing VerticalTabLayou and VerticalViewPager for Android which google don't provide

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /