android 顶部Tab实现及原理

来源:互联网 发布:mac文件储存位置 编辑:程序博客网 时间:2024/05/17 23:11




Android 顶部tab 比较流行实用,在很多的应用中都能见到。下面使用andbase 快速集成到自己的项目中

使用别人的框架 可以不用重复造轮子,但是 也需要知道实现的原理,那么 以后 自己也可以自定义一个,我们也可以从别人的框架中

学习到很多东西,比如别人的 代码风格 命名规范,以及 封装的程度 里面实现的一些 细节 都可以从中吸取经验,为以后进阶 升级做准备。

   andbase 顶部 Tab 切换 快速集成 以及实现原理
   
   使用的自定义view 为 com.ab.view.sliding.AbSlidingTabView
   
   先看下 它的实现原理,
   
   如果有andbase源码的朋友 也可以对照着看,
   
   首先AbSlidingTabView  这个类  集成是 LinearLayout, 大家都知道  上面 tab切换 点击 下面的界面 会变成相应的,
    下面的界面 确定了 是 fragment ,从源码中 能看到 ViewPager,HorizontalScrollView等控件

那 基本 可以知道 实现的原理,我们的 tab 切换 是一个LinearLayout,里面 嵌套 HorizontalScrollView 使得可以滑动,然后 

HorizontalScrollView里面 就是具体每一个tab,tab里面 提供设置 文字,文字颜色 大小 间隔 等等一些属性,

那么 下面 就是 使用ViewPager,ViewPager 里面 放入 一个个的fragment ,然后上面的 tab 和 下面的 ViewPager实现联动 

就成就了我们一个tab控件,我们只需设置几个 fragment 和 每一个 tab的 文字 以及颜色 等等的调整。

虽然 实现原理已经解析,但是 真正要写的 比较好用 而且 最重要的是稳定,那么  需要做的工作  考虑的细节 还是非常的多。

希望大家 有所感悟。 那么 看看 它  究竟 怎么快速集成到我们的项目吧


public class TabTopActivity extends AbActivity {

private MyApplication application;
private AbSlidingTabView mAbSlidingTabView;



@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setAbContentView(R.layout.tab_top);
application = (MyApplication) abApplication;

AbTitleBar mAbTitleBar = this.getTitleBar();
mAbTitleBar.setTitleText(R.string.tab_top_name);
mAbTitleBar.setLogo(R.drawable.button_selector_back);
mAbTitleBar.setTitleBarBackground(R.drawable.top_bg);
mAbTitleBar.setTitleTextMargin(10, 0, 0, 0);
mAbTitleBar.setLogoLine(R.drawable.line);
initTitleRightLayout();

  
mAbSlidingTabView = (AbSlidingTabView) findViewById(R.id.mAbSlidingTabView);

//如果里面的页面列表不能下载原因:
//Fragment里面用的AbTaskQueue,由于有多个tab,顺序下载有延迟,还没下载好就被缓存了。改成用AbTaskPool,就ok了。
//或者setOffscreenPageLimit(0)

//缓存数量
mAbSlidingTabView.getViewPager().setOffscreenPageLimit(5);


FragmentLoad page1 = new FragmentLoad();
FragmentLoad page2 = new FragmentLoad();
FragmentLoad page3 = new FragmentLoad();
FragmentLoad page4 = new FragmentLoad();
FragmentLoad page5 = new FragmentLoad();
FragmentLoad page6 = new FragmentLoad();



List<Fragment> mFragments = new ArrayList<Fragment>();
mFragments.add(page1);
mFragments.add(page2);
mFragments.add(page3);
mFragments.add(page4);
mFragments.add(page5);
mFragments.add(page6);

List<String> tabTexts = new ArrayList<String>();
tabTexts.add("推荐");
tabTexts.add("排行");
tabTexts.add("游戏中心");
tabTexts.add("专题栏目");
tabTexts.add("英雄三国");
tabTexts.add("专题栏目");

//设置样式
mAbSlidingTabView.setTabTextColor(Color.BLACK);
mAbSlidingTabView.setTabSelectColor(Color.rgb(30, 168, 131));
mAbSlidingTabView.setTabBackgroundResource(R.drawable.tab_bg);
mAbSlidingTabView.setTabLayoutBackgroundResource(R.drawable.slide_top);

//设置间隔
mAbSlidingTabView.setTabPadding(20, 8, 20, 8);
}


}


    在xml中 引用就行
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/gray_white"
android:orientation="vertical" >


<com.ab.view.sliding.AbSlidingTabView
android:id="@+id/mAbSlidingTabView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />


</RelativeLayout>

这章主要分析了下 实现的原理 和 代码的使用 ,从整的使用上来说 还是非常简单 好用。
如果 大家需要 andbase的源码 以及 andbase Demo 到网上下,或者在评论中留下你的
邮箱地址,可以分享给大家。
   
   
   
   
0 0
原创粉丝点击