Android5.0
1.采用全新Material Design设计风格。
Material Design,扁平化的设计理念。新的视觉语言,在基本元素的处理上,借鉴了传统的印刷设计,字体版式、网格系统、空间、比例、配色、图像使用等这些基础的平面设计规范。
2.支持多种设备。
Android系统的身影早已出现在多种设备中,比如:智能手机、平板电脑、笔记本电脑、智能电视、汽车、智能手表甚至是各种家用电子产品等。
3.全新的通知中心设计。
谷歌在Android Lollipop中加入了全新风格的通知系统。改进后的通知系统会优先显示对用户来说比较重要的信息,而将不太紧急的内容隐藏起来。用户只需要向下滑动就可以查看全部的通知内容。
4.支持64位ART虚拟机。
Android5.0放弃了之前一直使用的Dalvik虚拟机,改用了ART模式,实现了真正的跨平台编译,在ARM、X86、MIPS等,无处不在。
5.Overview。
多任务视窗现在有了一个新的名字,Overview。在界面中,每一个App都是一张独立的卡片,拥有立体式的层叠效果,用户可以设定“最近应用程序”,通过滑动来快速切换App。
6.设备识别解锁。
现在个人识别解锁已经被普遍使用,比如当特定的智能手表出现在Android设备的附近时,就会直接绕过锁屏界面进行操作。而Android5.0也增加了这种针对特定设备识别解锁的模式。
7.OK Google语音指令。
当手机处于待机状态时,对你的手机轻轻说声“OK Google”,手机即刻被唤醒,只需说出简单的语音指令,如播放音乐、查询地点、拨打电话和设定闹钟等,一切只需“说说”而已。
8.Face unlock面部解锁。
在Android5.0中,Google花费大力气优化了面部解锁功能,当用户拿起手机处理锁屏界面上的消息通知时,面部解锁功能便自动被激活。随意浏览几条消息之后。手机已经默默地完成了面部识别。
9.RecyclerView
你想要控制其显示的方式,请通过布局管理器LayoutManager
你想要控制Item间的间隔(可绘制),请通过ItemDecoration
你想要控制Item增删的动画,请通过ItemAnimator
10.CardView
CardView基本属性(xml文件中)
app:cardBackgroundColor这是设置背景颜色
app:cardCornerRadius这是设置圆角大小
app:cardElevation这是设置阴影(z轴),具体效果见下面
app:contentPadding 设置内容的padding CardView子布局与CardView边界
app:contentPaddingLeft 设置内容的左padding
app:contentPaddingTop 设置内容的上padding
app:contentPaddingRight 设置内容的右padding
app:contentPaddingBottom 设置内容的底padding
11.Notification
(1)普通Notification
(2)折叠式Notification
(3)悬挂式Notification
{
String channelId = “normal”;
String channelName = “普通”;
int importance = NotificationManager.IMPORTANCE_DEFAULT;
createNotificationChannel(channelId,channelName,importance);
channelId="fold";
channelName="折叠";
importance=NotificationManager.IMPORTANCE_LOW;
createNotificationChannel(channelId,channelName,importance);
channelId="hang";
channelName="悬挂";
importance=NotificationManager.IMPORTANCE_LOW;
createNotificationChannel(channelId,channelName,importance);
}
9.toolBar的使用
Toolbar是应用的内容的标准工具栏,可以说是Actionbar的升级版
,两者不是独立关系,要使用Toolbar还是得跟ActionBar扯上关系的。相比Actionbar Toolbar最明显的一点就是变得很自由,可随处放置
,因为它是作为一个ViewGroup来定义使用的
,所以单纯使用ActionBar已经稍显过时了,它的一些方法已被标注过时。
(1)布局文件
(2)MainActivity
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar; @Override protected void
onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Title"); toolbar.setSubtitle("SubTitle");
toolbar.setLogo(R.mipmap.ic_launcher); //设置导航图标要在setSupportActionBar方法之后
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.mipmap.ic_drawer_home);
}
}
(3)添加菜单选项图标
一般导航条,在其右侧都会有菜单选项,当然ToolBar也是支持自定义菜单的,
Android6.0
1.应用权限管理。
在Android6.0中,应用许可提示可以自定义了。它允许对应用的权限进行高度管理,比如应用能否使用位置、相机、网络和通信录等,这些都开放给开发者和用户。此前的安卓系统的应用权限管理只能靠第三方应用来实现,在安卓6.0中应用权限管理成为系统级的功能。
2.Android Pay
Android支付统一标准。新的系统中集成了Android Pay。其特性在于简洁、安全、可选性。Android Pay是一个开放性平台,用户可以选择谷歌的服务或者使用银行的APP来使用它,Android Pay支持4.4以后系统设备,谷歌宣布Android Pay已经与美国三大运营商700多家商店达成合作,支付功能可以使用指纹来进行支付。
3.指纹支持。
虽然很多厂商的Android手机实现了指纹的支持,但是这些手机都使用了非谷歌认证的技术。这一次谷歌提供的指纹识别支持,旨在统一指纹识别的技术方案。
4.Doze电量管理。
Android6.0自带Doze电量管理功能。手机静止不动一段时间后,会进入Doze电量管理模式。谷歌表示,当屏幕处于关闭状态时,平均续航时间可提高30%。
5.App Links
Android6.0加强了软件间的关联,允许开发者将App和他们的Web域名关联,谷歌大会展示了App Links的应用场景,比如你的手机邮箱里收到一封邮件,内文里有一个链接,点击该链接可以直接跳转到应用,而不再是网页。
6.Now on Tap
在桌面或App的任意界面,长按Home键即可激活Now on Tap。它会识别当前屏幕上的内容,并创建Now卡片。
7.处理“不再询问”选项
如果用户选择了“不再询问”,那么每次我们调用需要访问该权限的API时都会失效,这显然不会带来好的用户体验,我们需要做的就是给用户一个友好的提示。送
8.运行时权限
在6.0中Android把所有的权限从逻辑上分成了两类:常规(normal)和危险(dangerous)
(1)常规权限指的是那些不会直接获取你隐私的权限,如果你在AndroidManifest.xml文件中列出了这些权限的话,系统会自动授权给你。这里是normal权限列表,有很多
(2)危险权限就是那些能获取你隐私信息,或者可能会影响你的文件等的操作。比如读取你的联系人、使用你的摄像头和读取你的日历等等
Android < 6.0:系统会给App所有的权限
Android >= 6.0 && targetSdkVersion < 23:系统会默认给予App所有的权限,但是用户可以去设置中关闭权限。这时你需要使用PermissionChecker.checkSelfPermission来检测App是否有某一个权限
public boolean selfPermissionGranted(Context context, String permission) {
// Android 6.0 以前,全部默认授权
boolean result = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (targetSdkVersion >= Build.VERSION_CODES.M) {
// targetSdkVersion >= 23, 使用Context#checkSelfPermission
result = context.checkSelfPermission(permission)
== PackageManager.PERMISSION_GRANTED;
} else {
// targetSdkVersion < 23, 需要使用 PermissionChecker
result = PermissionChecker.checkSelfPermission(context, permission)
== PermissionChecker.PERMISSION_GRANTED;
}
}
return result;
}
获取App的targetSdkVersion值:
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(
context.getPackageName(), 0);
targetSdkVersion = info.applicationInfo.targetSdkVersion;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Android7.0
1.多窗口模式。
Android7.0中支持多窗口多任务处理呢,你只要在一个应用程序中长按Overview按钮就能进入多种模式,在大屏幕设备中同时打开两个应用程序窗口显然可以提升执行效率。例如你可以一边网上冲浪,一边发微信给自己的朋友。
2.Data Saver
Android7.0中引入了Data Saver模式,它是一种流量保护机制。启用Data Saver模式时,系统将拦截后台的数据使用,并在可能的情况下减少前台运行应用使用的数据量,例如限制流媒体服务的码率。下调画质,以及减少缓存等。
3.改进了Java 8语言支持
Android7.0可以支持Java 8语言平台。使得Android的Jack编译器现在有能够有助于减少系统的冗余代码、降低占用和运行时间。开发者可以直接用Lambda表达式,
4.自定义壁纸。
在Android7.0中你可以为主屏幕设置壁纸,为锁屏设置另外一张壁纸。这个过程很简单,你只需要选择一张图像作为壁纸,然后就会弹出一个新的提示来让你选择是将它作为主屏壁纸还是锁屏壁纸。
5.快速回复
Android7.0还支持通知栏直接回复的功能,例如你收到一条新的FacebookMeesager或者来电,可以直接在通知栏进行输入操作和接听操作。
6.Daydream VR支持
Android7.0内置谷歌全新的VR平台Daydream。Daydream是一个虚拟现实平台,由Daydream头盔手柄和智能手机构成。支持Daydream的智能手机要满足一定的硬件要求。
7.后台省电
Android7.0在后台省电方面也做了不小的改进。屏幕关闭后所有的后台进程都将会被系统限制活动,使这些应用不会在后台中持续唤醒,从而达到省电的目的。
8.快速设置
下拉通知栏顶部可以展开快捷开关界面。在快捷开关界面右下角有一个“编辑”按钮。点击之后可以自定义添加/删除快捷开关,和拖放进行排序。
9.Unicode 9 支持和全新的emoji表情符号
Android7.0支持Unicode 9,并且新增了大约70种emoji表情符号,这些表情符号,大多数都是人形的,并且提供不同的肤色。
10. Google Assistant
Google Assistant号称融合了谷歌搜索的深度学习技术以及Google Now个人信息学习技术,它能够分辨用户的自然语言,并具备联系上下文的理解能力,这样你在向他发出指令时,就像和朋友聊天一样,无需迎合系统说一些生硬且古板的语句。
Android8.0
1.画中画
画中画(Picture in Picture),简称 PIP。画中画就是一个画面中浮动着另外一个画面,其实就是画面的层次感。画中画最早用于 Android TV,从 Android 8.0 开始,API 开放给所有 Android 设备。其实在 Android 的旧版本,也可以利用 Android 窗口设计框架,在其它应用上面绘制 UI 的功能,实现类似的功能。国内的某信的视频通话就是基于 Android 这一特点。当然,Android 推出画中画功能,会更加便捷的实现同样的功能。
2.通知渠道
Notification channels 实际就是通知分类,每个应用可以创建多个不同的分类来显示通知,可以为不同的类别定制如下内容
3.通知延时提醒
Snoozing,Android 8.0 支持用户可以延时再次提醒该通知
4.自动填充
自动填充功能在互联网上很多地方已经有应用,如百度的搜索框,在输入搜索内容的一部分时,会弹出一个列表选择。在 Android AutoCompleteTextView 控件,也是实现类似的功能,只是 AutoCompleteTextView 的限制,Android 此处引入了功能强大的自动填充框架,也是很有必要。毕竟,自动填充可以带来两点优势
(1)减少输入时间,在手机上的输入速度实在也是慢
(2)减少输入错误,比如登录之类的,完全可以规避输入错误的问题
5.引入新权限
Android O 中引入了一项新权限android.permission.ANSWER_PHONE_CALLS,使用此权限,应用可按设定的方式接听拨入的电话。此权限被划分为危险类别,属于 PHONE 权限组。
要在应用中处理拨入的电话,您可以使用 TelecomManager 类中的 acceptRingingCall() 方法。
内容提供程序分页
我们已更新内容提供程序以支持加载大型数据集,每次加载一页。例如,一个具有大量图像的照片应用可查询要在页面中显示的数据的子集。内容提供程序返回的每个结果页面由一个 Cursor 对象表示。客户端和提供程序必须实现分页才能利用此功能。
新的 getMetrics() 方法将返回一个包含配置和性能信息的 Bundle 对象,用一个包含属性和值的地图表示。为以下媒体类定义 getMetrics() 方法:
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
6.多显示器支持
从 Android O 开始,此平台为多显示器提供增强的支持。如果 Activity 支持多窗口模式,并且在具有多显示器的设备上运行,则用户可以将 Activity 从一个显示器移动到另一个显示器。当应用启动 Activity 时,此应用可指定 Activity 应在哪个显示器上运行。
注:如果 Activity 支持多窗口模式,则 Android O 将为该 Activity 自动启用多显示器支持。您应测试您的应用,确保它在多显示器环境下可正常运行。
每次只有一个 Activity 可以处于继续状态,即使此应用具有多个显示器。具有焦点的 Activity 将处于继续状态,所有其他可见的 Activity 均暂停,但不会停止。如需了解有关当多个 Activity 可见时活动生命周期的详细信息,请参阅多窗口生命周期。
当用户将 Activity 从一个显示器移动到另一个显示器时,系统将调整 Activity 大小,并根据需要发起运行时变更。
Android9.0
1.室内WIFI定位
Android P增加了对RTT Wi-Fi协议的支持,以此作为室内定位的基础。
在支持硬件支持的Android P设备上,开启定位并且打开WIFI扫描后就可以使用该功能进行定位。应用可以测量与附近支持RTT的Wi-Fi接入点(AP)的距离。设备必须启用位置并启用Wi-Fi扫描(在设置>位置下)。使用这个功能不会连接到WIFI,而且为了保持隐私,只有手机能确定AP到设备的距离,反之则不能。
2.“刘海”屏幕支持
Android P 支持了手机屏幕是不规则形状时的获取(主要是应对刘海屏吧)。可以使用类似windowInsets.getDisplayCutout()来获取一些你想要的信息。
//您可以在自己的View中获取到不应该绘制的部分屏幕
getRootWindowInsets().getDisplayCutout().getBounds();
getRootWindowInsets().getDisplayCutout().getSafeInsetBottom();
getRootWindowInsets().getDisplayCutout().getSafeInsetLeft();
getRootWindowInsets().getDisplayCutout().getSafeInsetRight();
getRootWindowInsets().getDisplayCutout().getSafeInsetTop();
//也可以设置Window的属性
WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
3.通知
(1)支持图像:Android P现在在手机上的消息通知中显示图像。您可以在消息上使用setData()来显示图像。
(2)会话参与者的简化支持:新的Notification.Person类用于标记参与聊天的人,包括他们的头像和URI。还有其他的一些API,现在都用Person类作为标志参数而不是CharSequence。
4.通信设置,广播以及免打扰
(1)阻止渠道:用户现在可以在应用的通知设置中阻止整组渠道。您可以使用isBlocked()方法来确定某个组何时被阻止,不对被阻止的组发送消息。
此外,您的应用可以使用新的getNotificationChannelGroup()方法查询当前渠道设置。
(2)新的广播类型:Android系统现在在通知频道和频道组的阻塞状态发生变化时发送广播。拥有被阻止的频道或群组的应用可以监听这些Intent并作出相应的反应。有关这些Intent的更多信息,请参阅NotificationManager参考中更新后的常量列表。有关对广播Intent作出反应的信息,请参阅广播。
(3)新的免打扰优先级类别:NotificationManager.Policy有两个新的策略常量:PRIORITY_CATEGORY_ALARMS(按优先级排列)和PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER(优先排列媒体,系统和游戏声音)
5.多相机支持和相机更新
现在,可以同时从两个或更多的物理摄像头同时获得数据流。在具有双前置或双后置摄像头的设备上,可以实现无法使用单个摄像头实现的功能,例如无缝缩放,散景 ,和立体视觉。 该API还允许您调用合理的或者融合的相机流,以便在两台或更多台相机之间自动切换。
相机的其他改进包括新的android.hardware.camera2.params.SessionConfiguration,有助于减少初始捕捉期间的延迟。而Surface共享可让相机客户端处理各种使用情况,而无需停止和启动相机流式传输。 此外还添加了基于显示的闪光灯支持的API。
6.新的图片解码
Android P新增了ImageDecoder类,为解码图像提供了一种更优的方法。由此可以用ImageDecoder来替换BitmapFactory和BitmapFactory.Options
7.动画
Android P引入了一个新的AnimatedImageDrawable类来绘制和显示GIF和WebP动画图像。 AnimatedImageDrawable与AnimatedVectorDrawable类似,因为AnimatedImageDrawable动画也是基于RenderThread工作的。 RenderThread本身在内部使用工作线程进行解码,因此解码不会干扰RenderThread。 这种实现允许您的应用拥有动画图像,而无需管理其更新或干扰应用的UI线程。