android 顶部Tab实现及原理
16lz
2021-01-26
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 到网上下,或者在评论中留下你的
邮箱地址,可以分享给大家。
更多相关文章
- Android(安卓)startForeground 却无notification的黑科技原理分
- android listview adapter中设置点击直接position被重用问题解决
- Android(安卓)launcher动态Icon的实现方法
- iOS设备蓝牙类库的选择
- Android(安卓)适配器模式应用及设计原理
- Android(安卓)实现按钮 跳转到某网页
- android风格统一化修改上方标题栏颜色
- Android(安卓)dalvik虚拟机内部机制详解(2)____内存管理原理
- Android高仿微信图片多选功能