版本相关-Android12

Android 12版本特性

Android12正式发布

Android的新UI–Material You(新的设计语言)

如果想将所有最新的 Material Design 3 新特性带入您的应用,请尝试 Material 设计组件 的 Alpha 版本,并关注即将到来的 Jetpack Compose 支持。

Android 12微件(Widgets)改进 API

Android 12 引入了以下系统参数来设置微件圆角的半径:
添加新的复合按钮
可以指定额外的微件大小调整限制
  1. 指定额外的微件大小调整限制
  2. 提供自适应布局精确布局

除了现有的 minWidthminHeightminResizeWidthminResizeHeight 属性之外,还可以使用下面这些新的 appwidget-provider 属性:

提供自适应布局
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Override
public void onUpdate(...) {
RemoteViews smallView = ...;
RemoteViews tallView = ...;
RemoteViews wideView = ...;

Map<SizeF, RemoteViews> viewMapping = new ArrayMap<>();
viewMapping.put(new SizeF(100f, 100f), smallView);
viewMapping.put(new SizeF(100f, 200f), tallView);
viewMapping.put(new SizeF(200f, 100f), wideView);
RemoteViews remoteViews = new RemoteViews(viewMapping);

appWidgetManager.updateAppWidget(id, remoteViews);
}
提供精确布局

如果一小组自适应布局不可行,您可以改为提供根据微件的显示大小量身定制的不同布局。通常,手机有两种大小(竖屏和横屏模式),可折叠设备有四种大小。

如需实现此解决方案,您的应用需要执行以下步骤:

  1. 过载 [AppWidgetProvider#onAppWidgetOptionsChanged(...)](https://developer.android.google.cn/reference/android/appwidget/AppWidgetProvider#onAppWidgetOptionsChanged(android.content.Context, android.appwidget.AppWidgetManager, int, android.os.Bundle)),当一组大小发生更改时,就会调用此方法。
  2. 调用 getAppWidgetManager#getAppWidgetOptions(...),这样会返回包含大小的 Bundle
  3. 访问 Bundle 中的 AppWidgetManager.OPTION_APPWIDGET_SIZES 键。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Create the RemoteViews for the given size.
private RemoteViews createRemoteViews(SizeF size) { }

@Override
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager
appWidgetManager, int appWidgetId, Bundle newOptions) {
super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);
// Get the new sizes.
ArrayList<SizeF> sizes =
newOptions.getParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES);
// Check that the list of sizes is provided by the launcher.
if (sizes == null || sizes.isEmpty()) {
return;
}
// Map the sizes to the desired RemoteViews.
Map<SizesF, RemoteViews> viewMapping = new ArrayMap<>();
for (SizeF size : sizes) {
viewMapping.put(size, createRemoteViews(size));
}
RemoteViews remoteViews = new RemoteViews(viewMapping);
appWidgetManager.updateAppWidget(id, remoteViews);
}
改进应用的微件选择器体验
实现更流畅的过渡

在Android12中,用户从微件启动您的应用时,会更流畅(有动画)。实现方式:使用 @android:id/backgroundandroid.R.id.background 标识背景元素

1
2
3
4
5
// Top level layout of the widget.
<LinearLayout
...
android:id="@android:id/background">
</LinearLayout>

注意:避免使用广播 trampoline。在Android 12中,如果广播接收器或 服务是从微件点击的 PendingIntent 发起的,应用仍可从其启动 activity。不过,新的应用动画将不会用于从广播接收器或服务启动的应用,这会导致用户体验不佳。

使用 RemoteViews 的运行时修改

通知界面更新

我们还对通知设计进行了改版,使其更现代、更实用。Android 12 也会使用标准的元素来美化自定义通知,使其观感与其他通知保持一致。请访问 官方文档 了解详细信息。

过度滚动拉伸效果

了让应用内容的滚动更加顺畅,Android 12 为所有滚动容器添加了一个新的过度滚动 “拉伸” 效果。这个自带的滚动停止效果覆盖整个系统和所有应用。请访问 官方文档 了解详细信息。

应用启动画面

Android 12 还为所有的应用带来了新的启动画面。应用也可以通过多种方式来定制启动画面,以彰显其独有的品牌个性。请访问 官方文档 了解详细信息。

性能表现

前台服务优化 - 为了给用户提供更好的体验,Android 12 禁止应用在后台启动前台服务。应用可以使用 JobScheduler 中新引入的 加急作业 (expedited job) 来代替之前的做法。请访问 官方文档 了解详细信息。

更灵敏的通知 - Android 12 对通知 trampoline (利用广播接收器或服务间接启动目标 Activity) 的限制有助于减少从通知中启动应用的延迟。例如,Google Photos 应用在不使用通知 trampoline 后,启动速度快了 34%。请访问 官方文档 了解详细信息。

升级API相关问题