虽然之前学习过Android开发的课程,但是真正完成的只有一些小型作业,并没有结合后端来实现一个真正完整的项目,用到的技术与现在的Android开发方法技术都有很大的区别,界面也十分简单单调。
但是在这次项目的实现过程中,我尽力地使用了许多现代Android开发常用的UI框架与API工具。
一、Fragment与Activity
Fragment,意为片段,同传统的Activity不同,它是用户
Fragment
表示Activity
中的行为或用户界面部分。您可以将多个片段组合在一个 Activity 中来构建多窗格 UI,以及在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(有点像您可以在不同 Activity 中重复使用的“子 Activity”)。
我的理解是,片段就是用户自定义的UI控件,并且是可复用的,可以嵌入不同的Activity中。我认为,现在的Android客户端设计,应该更多地使用Fragment来替代Activity,比如在显示列表的时候,一个ListFragment可以复用在多个Activity中,而不需要创建多个Activity。
Fragment生命周期如下,同Activity是紧密相连的。
Fragment & BottomNavigationView
使用底部导航栏,可以说是很多app首页的选择,界面也比较美观。如果没有Fragment,导航栏的点击就又会跳转到不同的页面,加载过程也比较慢,不是很好的选择。
底部导航栏的使用,在activity的xml中声明该空间,同时设置其位置。
1 | <com.google.android.material.bottomnavigation.BottomNavigationView |
添加menu/bottom_nav_menu.xml
声明菜单内容。
1 | <?xml version="1.0" encoding="utf-8"?> |
在Activity中设置导航栏控制Fragment:
1 | private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener |
这里提示,使用newInstance之类的方法来创建Fragment,而不是直接new Fragment()。
Fragment & TabLayout & Viewpaper
TabLayout同底部导航栏相似,只不过它大多数情况下使用在顶部,而配合ViewPaper,能够提前加载Fragment,显示与加载效果将会更好。
其大致使用方法同底部导航栏配合Fragment相似,只不过ViewPaper需要自定义一个ViewPaperAdapter,来控制Fragment的显示。
自定义Adapter类时,需要特别注意getItem方法,可以说是由它来控制显示的Fragment。
1 |
|
在Activity中设置:
1 | sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager()); |
二、 Retrofit 2 + Rxjava2
Retrofit 2 + Rxjava2这两个工具能够十分方便实现网络api请求和获取,以及相关线程的处理。以下介绍一些简单的使用与可复用模板。
首先添加依赖:
1 | //okhttp和retrofit |
添加权限:
1 | <uses-permission android:name="android.permission.INTERNET"/> |
编写数据实体类,略,只需要注意变量名同json条目名相同,或者添加SerializedName
创建Service类,相当于绑定url吧。
1 | public interface ApiService { |
封装Retrofit请求过程,相当于封装一个api请求工具。
1 | public class Api { |
封装线程管理和订阅,相当于将线程管理函数封装,并且封装相应的方法用于调用url。
1 | public class ApiMethods { |
重写Observer类与监听接口,将返回值封装并创建可复用接口。
1 | public interface ObserverOnNextListener<T> { |
调用:重写onNext,并调用ApiMethod
中相应函数即可。
三、推荐一些UI控件
Nice Spnnier
Android原生的下拉列表十分的简陋,这个下拉UI要好看很多,使用也十分简单。
Time Picker Dialog
在时间选择的处理上,原生的DatePicker和TimePicker不仅需要分开使用,而且也不是很好看,这个时间选择对话框的效果要好很多。