Android 6.0新特性
用户体验:
5月29日零点,谷歌正式在旧金山举办了广大安卓机友们都很期待的I/O开发者大会,这是谷歌每年都会举办的一次盛会,而对安卓机友们来说就是一次期盼。此次在会上,谷歌为大家带来了众望所归的安卓6.0(Android M)操作系统。
新特性一:App Permissions(软件权限管理)
在安卓6.0里,应用许可提示可以自定义了。它允许对应用的权限进行高度管理,比如应用能否使用位置、相机、麦克风、通讯录等,这些都可以开放给开发者和用户。
新特性二:Chrome Custom Tabs(网页体验提升)
新版的M对于Chrome的网页浏览体验进行了提升,它对登陆网站、存储密码、自动补全资料、多线程浏览网页的安全性进行了一些列的优化。
新特性三:App Links(APP关联)
安卓6.0加强了软件间的关联,谷歌在现场展示了 一个例子,比如你的手机邮箱里收到一封邮件,内文里有以个Twitter链接,用户点击该链接可以直接跳转到Twitter应用,而不再是网页。
新特性四:Android Pay(安卓支付)
Android支付统一标准,新的安卓6.0系统中集成了Android Pay,其特性在于简洁、安全、可选性。Android Pay是一个开放性平台,使用户就可以选择谷歌的服务或者使用银行的APP来使用它,Android Pay支持4.4以后系统设备,在发布会上谷歌宣布Android Pay已经与美国三大运营商700多家商店达成合作。支付功能可以使用指纹来进行支付,这意味着今年基于安卓M的Nexus产品肯定会有指纹识别了。
新特性五:Fingerprint Support(指纹支持)
安卓6.0增加了对指纹的识别API,谷歌开始在M里自建官方的指纹识别支持,力求Android统一方案,目前所有的Android产品指纹识别都是使用非谷歌认证的技术和接口。
新特性六:Power & Change(电量管理 )
新的电源管理模块将更为智能,比如Android平板长时间不移动时,安卓6.0M系统将自动关闭一些App。同时安卓6.0设备将支持USB Type-C接口,新的电源管理将更好的支持Type-C接口。
此次,安卓6.0(Android M)新系统主要改进的地方就是,改善用户体验,修复BUG,提升了这个开放平台的整体质量,很多内容都得到了改善,相信从这些新特性中大家也能看到。
新的知识点:
1. okHttp
1.1 okHttp用于替代HttpUrlConnection和Apache HttpClient(6.0里已移除HttpClient)
1.2 okHttp优势
1.2.1 支持SPDY,共享同一个Socket来处理同一个服务器的所有请求
1.2.2 如果SPDY不可用,则通过连接池来减少请求延迟
1.2.3 无缝的支持GZIP来减少数据流量
1.2.4 缓存响应数据来减少重复的网络请求
1.3 导入依赖
1.3.0 图形化操作
file - project structrue - app - dependebcies - library dependencies - 搜索okhttp
1.3.1 修改build.gradle
compile "com.squareup.okhttp:okhttp:2.5.0"
1.3.2 下载jar文件
自行百度
1.3 发送get请求
1.3.1 创建OkHttpClient对象
1.3.2 使用Request.Builder构建请求对象
// http://wthrcdn.etouch.cn/weather_mini?citykey=101010100
Request request = new Request.Builder().url(url).build();
1.3.3 发送请求
Response res = okHttpClient.newCall(request).execute();
1.3.4 获取服务器返回的数据
String json = res.body().string();
1.4 发送post请求
1.4.1 声明post的数据类型
MediaType JSON = MediaType.parse("application/json;charset=utf-8");
1.4.2 构建JSON字符串
String jsonStr = "{name=\"你好啊!\"}";
1.4.3 创建RequestBody消息体对象
RequestBody body = RequestBody.create(JSON,jsonStr);
1.4.4 使用Request.Builder构建请求对象
// http://192.168.0.102:8080/TestProject/JsonServlet
Request request = new Request.Builder().url(url).post(body).build();
1.4.5 创建OkHttpClient对象,并发送请求
Response res = okHttpClient.newCall(request).execute();
1.4.6 获取返回结果
if(res.isSussessful()){
String json = res.getBody();
}
1.5 发送post请求,并传递字段
1.5.1 构建RequestBody消息体对象
// http://192.168.0.102:8080/TestProject/ParamServlet
RequestBody body = new FormEncodingBuilder()
.add("platform","android")
.add("version","23")
.add("SDK","24")
.build();
1.5.2 构建Request对象、OkHttpClient对象,发送post请求,并获取返回值
2. TextInputLayout
2.0 环境配置
2.0.1 需要引用Support v7 和 Support Design 包(从MAVEN库引用,或最新的%SDK%\extra\design\libs下有jar包)
2.0.2 创建xml的app属性(可以直接使用代码模板:appns)
xmlns:app="http://schemas.android.com/apk/res-auto"
2.1 展示效果:自带界面友好的错误提示
2.2 使用TextInputLayout包裹一个EditText
2.3 获取输入框
textInputLayout.getEditText(); // 不需要findViewById
2.4 显示错误提示
textInputLayout.setErrorEnable(true);
textInputLayout.setError(msg);
2.5 隐藏错误提示
textInputLayout.setErrorEnable(false);
3. TextSelection变更
3.1 展示效果:对比5.0的文本选择,6.0系统文本选择显示的菜单项可以被修改。
3.2 创建布局,添加TextView
3.3 获取TextView对象,注册回调监听
tv.setCustomSelectionActionModeCallBack()
3.4 自定义类实现监听接口 ActionMode.CallBack2
3.4 ActionMode.CallBack2的onCreateActionMode方法创建Meu对象
3.4.1 创建MenuInflate对象
MenuInflate menuInflate = actionMode.getMenuInflater();
3.4.2 填充menu对象
menuInflate.inflate(R.menu.main, menu);
3.4.3 方法返回值设置为true,说明该方法已被拦截
4. FloatingActionButton(FAB)
4.1 用于显示一个悬浮在界面上的按钮,可以设置点击事件(onClickListener)
4.2 设置按钮大小
app:fabSize="mini"
4.3 设置按钮背景色
app:backgroundTint="#fff";
5. SnackBar
5.1 展示效果:用于显示提示,官方建议用于替代Toast
5.2 对比Toast来使用
Toast.makeText(context,msg,0).show();
Snackbar.make(view,msg,0).show();
5.3 参数里View的作用
查看官方文档,该view用于查找ParentView,以确定SnackBar的显示位置
5.4 设置点击事件
snackBar.setAction("可点击的提示文字",onClickListener);
6. TabLayout
6.1 展示效果:方便的实现tab跟随Viewpager切换,不需要第三方或者自定义
6.3 在layout里使用tablayout
6.4 向tablayout对象addTab
tabLayout.addTab(tabLayout.newTab().setText(""))
6.5 关联ViewPager
方式一: viewpager.addOnPagerChangeListener(new TabLayoutOnPagerChangeListener(tabLayout))
方式二:tabLayout.setupWithViewPager(viewPager)
6.6 ViewPager使用的FragmentPagerAdapter
需要在getPagerTitle方法返回一个字符串,该字符串会作为对应position的tab的标题。
6.7 设置tab的点击事件
tabLayout.setOnTabSelectedListener
7. NavigationView
7.1 展示效果:用作侧滑菜单的侧边导航栏
7.2 必须嵌套在DrawerLayout里使用
DrawerLayout包含两个子布局,一个导航栏,另一个为显示的正文
7.3 NavigationView的属性:
7.3.1 app:headerLayout,可选项,可以指定一个布局作为导航内容的Header
7.3.2 app:menu,必需项,指定一个menu,作为导航内容的菜单
7.4 导航栏的点击响应
7.4.1 navigationView.setNavigationItemSelectedListener
该方法监听被点击的MenuItem,判断MenuItem对象处理对应的事件响应
8. CoordinatorLayout
8.1 展示效果:可以协调多个布局间的位置关系。让FloatActionBar上下滑动,为Snackbar留出空间;拓展或折叠toolbar;控制view扩展或收缩,以及大小比例
8.2 CoordinatorLayout作为根布局使用
8.3 配合FloatActionBar和SnackBar使用
8.3.1 布局里添加FAB,当界面上显示Snackbar的时候会自动的偏移FAB的位置
8.4 配合AppBarLayout和toolbar使用
8.4.1 用AppBarLayout包裹的子view会以一个整体的形式作为AppBar,从而具备统一的风格
8.4.2 设置toolbar属性可以使toolbar随着界面滑动而隐藏/显示
app:layout_scrollFlags="scroll|enterAlways"
// scroll 表示该view可以被折叠
// enterAlways 表示向上滑动则隐藏ToolBar,向下滑动则显示
// exitUntilCollapsed 将关闭滚动直到它被折叠起来(有 minHeight) 并且一直保持这样
// enterAlwaysCollapsed 定义了 View 是如何回到屏幕的,当你的 view 已经声明了一个minHeight, 并且你使用了这个标志,你的 View 只有在回到这个最小的高度的时候才会展开,只有当 view 已经到达顶部之后它才会重新展开全部高度。
8.4.3 可滚动的控件需要设置属性
app:layout_behavior="@string/appbar_scrolling_view_behavior"
// 标识自己发起的滚动可以导致AppBar收缩
8.4.3 带layout_scrollFlags的view需要放在布局的前面,这样收回的view才能够正常退出,而固定的view继续留在顶部
8.5 配合AppBarLayout和CollapsingToolbarLayout使用
8.5.1 AppBarLayout用于包裹且仅包裹CollapsingToolbarLayout,使得CollapsingToolbarLayout作为AppBar而存在
8.5.2 CollapsingToolbarLayout用于包含Toolbar和ImageView, 提供滑动中的渐变和视差效果
8.5.3 设置CollapsingToolbarLayout属性
app:expandedtitleMarginStart="10dp"// 指定文字和左边缘的间距
app:contextScrim="?attr/colorPrimary"//折叠后容器的颜色
app:layout_scrollFlag="scroll|exitUntilCollapsed"
// 拦截滚动的事件
// enterAlwaysCollpsed ---------- ????????
// exitUntilCollapsed 可以让ToolBar固定在最顶部,而不伴随手势的滚动隐藏------- ??????????
8.5.4 设置ImageView属性
app:layout_collapseMode="parallax"
// parallax模式:在内容滚动时,CollapsingToolbarLayout里的view可以同时滚动,造出视差效果
8.5.4 设置Toolbar属性
app:layout_collapseMode="pin"
// pin模式:当CollapsingToolbarLayout完全收缩后,继续保留在屏幕上
android:layout_height="?attr/actionbarSize" // 设置高度为actionbar的高度
8.5.5 手势滑动时,修改toolbar文字大小,文字颜色
8.5.5.1 获取到CollapsingToolbarLayout对象
8.5.5.2 设置标题
collapsingToolbarLayout.setTitle
8.5.5.3 设置展开状态的颜色
collapsingToolbarLayout.ExpandedTitleColor
8.5.5.4 设置折叠状态的颜色
collapsingToolbarLayout.setCollapsedTitleTextColor
附:Android6.0 Design新特性搜索关键字:高逼格UI