模块分析
- 常规模块:
- 网络访问
Android原生:HttpURLConnection、HttpClient、AsyncTask
常见三方库:XUtils、Volley、OkHttp - 网络缓存
针对网络请求的内容进行缓存,比如说缓存服务器响应的Json数据到File、SP或者数据库,比如图片缓存 - 数据解析
XML:DOM解析、SAX解析、Pull解析
Json:JsonObject、Gson、FastJson - 网络协议的封装
封装服务器的接口,方便我们发起网络请求 - 图片加载以及缓存
XUtils、Volley、UniversalImageLoader、Picasso、Glide、Fresco - UI展现
对整个项目UI框架的一个抽取 - 控件查找
ButterKnife
ButterKnife:
- 网络访问
采用ButterKnife来获取控件实例。
* 导入ButterKnife的Jar包,并添加依赖
* 安装ButterKnife的Android Studio插件
方式一:打开“Settings -> Plugins -> 搜索Android ButterKnife Zelezny -> install -> 安装后重启Studio”
方式二:打开“Settings -> Plugins -> Install Plugin from disk -> 选择下载好的插件 -> 安装后重启Studio”,插件包:
在Java代码中,光标选中布局xml,比如把光标放到“R.layout.activity_main”上,按下ALT + INSERT,选择“Generate ButterKnife Injections”,插件将自动生成注解代码。
- 不常规模块:
- 聊天模块
环信、融云、网易云信、XMPP - 支付模块
支付宝、微信、银联 - 安全模块
加密算法:AES、DES、RSA
- 聊天模块
常用的第三方控件
- 侧滑菜单
Slidingmenu –> 菜单在内容区域的下方
DrawLayout –> 菜单在内容区域的上方,与ActionBar、ToolBar联动
DrawLayout :
引入DrawerLayout和ActionBarDrawerToggle,使用DrawerLayout实现侧滑菜单
Android在support-v4包中提供了一个抽屉布局的控件:DrawerLayout
在做侧边栏的时候,我们可以选用SlidingMenu,也可以选用这个DrawerLayout来实现侧拉栏。
使用步骤:
1,添加support-v4包的依赖
compile 'com.android.support:support-v4:23+'
2,修改xml,将根布局DrawerLayout定义主布局
3, 定义菜单布局,注意菜单布局必须指明” android:layout_gravity”属性,告知DrawerLayout这个菜单的划出方向是left还是right。当然,你也可以写2个菜单布局,一个在left,一个在right。
<?xml version="1.0" encoding="utf-8"?>
<!-- 以V4包下的DrawerLayout作为顶层布局 -->
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 主布局-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f00"/>
<!-- Menu布局,注意:必须设置"android:layout_gravity"属性 -->
<FrameLayout
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#0f0"/>
<!-- 当然,你也可以声明多个Menu布局,比如下面这个从右边划出的Menu -->
<FrameLayout
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#00f"/>
</android.support.v4.widget.DrawerLayout>
,4,使用ActionBarDrawerToggle与DrawerLayout联动
构建ActionBarDrawerToggle对象,并且将ActionBarDrawerToggle与DrawerLayout进行绑定。
注意:ActionBarDrawerToggle在v4包和v7包下都有,这里我们使用v7包下的,因为v4包下的在21版本及以上的系统中没有动画效果,已经过时了,不再使用。
/**
* 初始化ActionBarDrawerToggle
*/
private void initActionBarDrawerToggle() {
mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, R.string.close);
//同步状态方法-->替换默认回退部分的UI效果
mToggle.syncState();
//设置drawerLayout的监听 --> DrawerLayout拖动的时候,toggle可以跟着改变ui
mDrawerLayout.setDrawerListener(mToggle);
}
//除此之外,为了通过点击Home按钮,控制DrawerLayout的打开和关闭,还需重写onOptionsItemSelected方法,进行相应的处理:
/**
* 点击ActionBar的home按钮会执行该方法,所以在该方法中做判断
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
mToggle.onOptionsItemSelected(item);
break;
}
return super.onOptionsItemSelected(item);
}
- 标题栏
自己写 –> 简单的实现一块布局XML,大部分应用都是这种方式
ActionBar –> Android官方提供的标题栏
ActionBar :
组成ActionBar的 4大部分
1,app 图标:包含了 图标,主标题,副标题,回退部分
2,视图控件:允许用户切换视图。视图切换控件的样式有下拉菜单或选项卡控件,d对应了,标准,list,tab,3种导航模式
3,操作按钮:在操作栏里,展示出你的 app 中最重要的操作。不能展示在操作栏里的操作,可以自动移到“更多操作”里
4,更多操作:把不常用的操作放到更多操作里
//得到actionBar的实例
// getActionBar();//android sdk actionbar
ActionBar supportActionBar = getSupportActionBar();//v4包中
//设置标题
supportActionBar.setTitle("GooglePlay");
// supportActionBar.setSubtitle("副标题");
//设置图标
supportActionBar.setIcon(R.drawable.ic_launcher);
supportActionBar.setLogo(R.mipmap.ic_action_call);
//显示logo/icon(图标)
supportActionBar.setDisplayShowHomeEnabled(false);//默认是false,默认是隐藏图标
//修改icon和logo显示的优先级
supportActionBar.setDisplayUseLogoEnabled(true);//默认是false,默认是没用logo,用的icon
//显示回退部分
supportActionBar.setDisplayHomeAsUpEnabled(true);//默认是false,默认隐藏了回退部分
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(getApplicationContext(), "点击了回退部分", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
ToolBar --> Android 5.0之后Google推出的用来替代ActionBar的控件
Tab标签切换
自己写 –> 比如HorizontalScrollView + LinearLayout,或者直接自定义控件
ViewPagerIndicator –> 三方控件
PagerslidingTabStrip –> 三方控件
TabLayout –> Android 5.0之后Google官方推出的标签切换控件轮播图
自己写 –> 使用Android原生ViewPager控件
自动轮播
无限轮播
按下去的时候停止轮播
开源控件 –> 比如BannerListView
复用convertView
使用ViewHolder
分页加载(上滑加载更多)
目的:分页分批请求数据
UI实现:
通过给listview添加footerView,见智慧北京
ListView中显示几种ViewType,见谷歌市场
协议支持:
协议返回一个more字段,见智慧北京
more有值 –> 可能有加载更多
more没有值 –> 没有加载更多
根据请求回来数据的长度判断,见谷歌市场
服务器返回的数据的条数 == PAGERSIZE –> 可能有加载更多
服务器返回的数据的条数 < PAGERSIZE –> 没有加载更多了RatioLayout
按比例设置图片的高度,保证图片不变形分类
多种条目的ListView –> ListView中显示几种ViewType推荐
飞入飞出效果 –> 三方控件StellarMap排行
流式布局 –> 自定义控件FlowLayout