1.创建首页UI
【说明】
【1】需要包含沉浸式效果,逐渐透明变为显示;
【2】主页内容的滑动显示;
【3】使用新的布局:coordinatorLayout;
【4】包含下拉刷新,上拉加载更多;
1.1 检查依赖是否存在
1.2 布局
【布局源码】layout/delegate_index.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical"> 7 8 <!--下拉刷新--> 9 <android.support.v4.widget.SwipeRefreshLayout 10 android:id="@+id/srl_index" 11 android:layout_width="match_parent" 12 android:layout_height="match_parent"> 13 14 <android.support.v7.widget.RecyclerView 15 android:id="@+id/rv_index" 16 android:layout_width="match_parent" 17 android:layout_height="match_parent" /> 18 </android.support.v4.widget.SwipeRefreshLayout> 19 20 <!--toolBar最好写在下面,否则新的内容显示的时候会将其遮住--> 21 <!--写为透明色,才会逐渐显示android:background="@android:color/transparent"--> 22 <android.support.v7.widget.Toolbar 23 android:id="@+id/tb_index" 24 android:layout_width="match_parent" 25 android:layout_height="80dp" 26 android:background="@android:color/transparent" 27 app:layout_behavior="com.flj.latte.ec.main.index.TranslucentBehavior"> 28 29 <android.support.v7.widget.LinearLayoutCompat 30 android:layout_width="match_parent" 31 android:layout_height="match_parent" 32 android:orientation="horizontal"> 33 <!--文字--> 34 <com.joanzapata.iconify.widget.IconTextView 35 android:id="@+id/icon_index_scan" 36 android:layout_width="0dp" 37 android:layout_height="match_parent" 38 android:layout_gravity="left" 39 android:layout_weight="1" 40 android:gravity="center" 41 android:paddingRight="10dp" 42 android:text="{icon-scan}" 43 android:textColor="@android:color/white" 44 android:textSize="25sp" /> 45 <!--搜索框--> 46 <!--android:layout_weight="4":占据2/3--> 47 <android.support.v7.widget.AppCompatEditText 48 android:id="@+id/et_search_view" 49 android:layout_width="0dp" 50 android:layout_height="40dp" 51 android:layout_gravity="center" 52 android:layout_weight="4" 53 android:background="@android:color/white" 54 android:gravity="center_vertical" 55 android:hint="搜索" 56 android:paddingLeft="20dp" /> 57 58 <com.joanzapata.iconify.widget.IconTextView 59 android:id="@+id/icon_index_message" 60 android:layout_width="0dp" 61 android:layout_height="match_parent" 62 android:layout_gravity="right" 63 android:layout_weight="1" 64 android:gravity="center" 65 android:paddingLeft="10dp" 66 android:text="{fa-bullhorn}" 67 android:textColor="@android:color/white" 68 android:textSize="25sp" /> 69 70 </android.support.v7.widget.LinearLayoutCompat> 71 72 </android.support.v7.widget.Toolbar> 73 74 </android.support.design.widget.CoordinatorLayout>
1.3 控件查找
【找到控件】
2.首页下拉刷新实现
2.1【初始化】
2.2 封装刷新功能
【分类包】上拉加载和下拉刷新都是swipfresh,统一规划,方便复用;
【模拟数据加载-临时加载逻辑的书写】整个app其实一个handler就够用了;
2.3 加载数据的处理
【效果】显示2s然后自动消失;
【网路请求数据的功能的实现】
3. 首页数据结构分析
3.1 数据结构的分析
【标准的restful请求】
【spansize】【2】占满一半宽度;【4】占满整个宽度;
【返回的数据不一定】可以具有多种组合;
【广告条】
【数据的布局】数据布局在apache服务器,可以配置在ngcix服务器,效率和性能比apache要好;
【是以get方式获取的数据】
3.2 首页数据的访问
4.多布局高可用性RecyclerView封装和数据解析器
4.1 recyclerView的开源库
【推荐使用的库】https://github.com/CymChad/BaseRecyclerViewAdapterHelper
4.2 添加依赖
4.3 数据转化的约束
【枚举单个item的显示的组合】是image+text还是image等等不同的组合;
【获取其他属性】
【返回和设置数据】
【创建builder】使用链式调用最好创建builder;建造者模式可以将builder写为静态内部类,也可以单写一个类;
【进行数据的转换处理】
4.4 对json数据的解析
【得到data整体全部的数据的数组】
【data数组每个数据元素的解析】
【对banner的解析】是一个数组
【给bean赋值】使用builder模式;
5.多布局高可用性RecyclerView封装和灵活适配器打造
5.1 adapter的封装
【简单封装】只是封装,没有被调用;
【adapter的书写】使用工厂模式封装;
【数据转换的框架的完善】
【增加初始化的操作】加入布局,监听等等;
[初始化-添加布局]
[单文字的布局]
[单文字的添加]
[多图片的显示布局]
[图片+文字的布局加载]
[轮播图的布局加载]
【设置宽度监听+增加动画】
【数据的转换】根据type进行依次的布局;
[文本的加载]
[图片的加载]决定使用glide库;
[文本+图片的加载]
[banner的加载]
6.分页客户端逻辑处理
【说明】需要一些常量:总页数;当前是第几页;分了几页;
【需要的东西】recyclerView;adapter;dataConvertor;pagingBean;
【第一页数据的加载】
【预留上拉加载的接口】
【初始化布局】
【bug】运行报错;
[错误原因]没有设置banner;
7.完善主页样式
【说明】没有分割线,不够优美;
7.1 添加依赖库
7.2 逻辑完善
【新建类】
【新建类】设置和描述边框线的颜色和宽度;
【完善类BaseDecoratio代码】
【创建颜色值】
【完善IndexDelegate】
【效果】
8.沉浸式状态栏和渐变透明顶栏解决方案和封装
8.1 第三方依赖
8.2 status_bar的设置
8.3 动态改变status_bar的实时颜色改变
【原理】实际改变的是CoordinatorLayout的Behavior属性值;
【效果改变的参数设置-1】
【颜色值的改变】创建一个bean,使用到第三方的auto-value;
【说明】其实只有一个toolbar的时候可以不进行设置behavior;但是为了严谨,需要设置;
【效果】渐变式的状态栏已经显示了;
9. 添加首页的item的点击事件
【说明】点击某一个图标进行跳转的时候应该包含下面的tab,整个页面一起跳转;
【如果传递的是this】 下面的tab没有跳转;
【跳转的逻辑】
【效果】点击每个页面都会进入到各自的详情页面
【增加跳转的动画】