Android底部导航栏的动态替换方案底部导航栏的动态替换方案
Android底部导航栏的动态替换方案,供大家参考,具体内容如下
1、通常来说,一般情况下,我们的app的BottomTab会有下面几种实现方式。
1)、自定义view,然后自己写逻辑去实现互斥。
2)、使用RadioGroup+RadioButton去实现底部的Tab。
自由度比极高,如果想实现搞复杂度的话可以重写 RadioButton。
3)、使用google design包里面的 TabLayout去实现。
可上、可下、可以滑动
偷懒的话可以根据已有api来设置一些资源,也可以 setCustomView()
4)、使用google design包里面的BottomNavigationView去实现。
(1)使用menu设置资源
(2)有默认的动画效果
2.本篇介绍的是日常见到的京东,淘宝类似的根据后台下发实现动态替换底部导航资源图片的方法(基于TabLayout实现)
既然提到了动态替换肯定意味着要下载资源,所以先讲一下IntentService
IntentService也是一个service,只不过google帮我们在里面封装并维护了一个HandlerThread,里面的操作都是异步的。
当任务执行完后,IntentService 会自动停止,不需要我们去手动结束。
如果启动 IntentService 多次,那么每一个耗时操作会以工作队列的方式在 IntentService 的 onHandleIntent 回调方法中执
行,依次去执行,使用串行的方式,执行完自动结束。
onHandlerIntent(Intent intent) 是最重要的一个方法
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
final String action = intent.getAction();
if (ACTION_FOO.equals(action)) {
// 在这里面处理耗时任务,当所有的耗时任务都结束以后,IntentService会自动的finish掉,不需要开发者关心。
}
}
}
选择IntentService的原因是因为下面的这几个操作都是耗时操作,所以我们干脆都封装到这service里面,我们只需要在合适的
时机去启动这个Service就ok了
需要下载资源压缩包
因为是动态替换,所以必然涉及到预下载,所以数据格式要先定好(下面是数据格式)。
{
"currentInfo":{//当前样式
"id":"111",
"imageZipUrl":你的下载地址,
"tabNamesList":[
"首页1","附近1","发现1","我的1"
],
"tabColorNormal":"B0C4DE",
"tabColorHighlight":"F7B62D",
"startTime":开始时间,
"deadLineTime":结束时间
},
"nextInfo":{//下一次要展示的样式
"id":"111",
"imageZipUrl":你的下载地址,
"tabNamesList":[
"首页2","附近2","发现2","我的2"
],
"tabColorNormal":"B0C4DE",
"tabColorHighlight":"FE6246",
"startTime":开始时间,
"deadLineTime":结束时间
}
}
需要存放资源压缩包