Android 11适配指南之Toast解析
2023-10-23 07:31:12
Android 11适配指南之Toast解析
改动内容:
自Android 11开始,修改了Toast的实现方式,无法直接使用系统内置的Toast,需要使用新的ToastCompat。原因是Android 11中,应用无法直接访问系统级的Toast,必须通过新的ToastCompat来创建和显示Toast。这是因为Android 11中对Toast的实现进行了更改,使其成为一个系统级服务,而不是一个应用程序级组件。因此,应用程序无法再直接创建和显示Toast,而必须使用新的ToastCompat。
问题根源
如何解决:
重写了show()方法,通过不同的判断逻辑来显示不同样式的Toast。 显示Toast还需要权限。 下面我们来具体分析。 在源码中我们看到,如果我们想用原生系统Toast,就必须先用context去检测是不是API 26以上,因为从API 26之后,原生系统Toast必须显示权限。
更改了Toast的实现方式,无法直接使用系统内置的Toast,需要使用新的ToastCompat。
技术实现
实现细节:
ToastCompat是Toast的一个新实现,它允许应用程序在Android 11及更高版本中创建和显示Toast。ToastCompat可以从android.support.v4.app包中导入。
ToastCompat的使用方法与Toast类似。首先,您需要创建一个ToastCompat对象。然后,您可以设置ToastCompat的文本、持续时间和显示位置。最后,您可以调用ToastCompat的show()方法来显示Toast。
以下是一个使用ToastCompat创建和显示Toast的示例:
ToastCompat toast = ToastCompat.makeText(context, "Hello, world!", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
兼容性
除了ToastCompat之外,还有其他方法可以在Android 11及更高版本中显示Toast。这些方法包括:
- 使用自定义Toast实现。
- 使用第三方库来显示Toast。
注意事项
当您在Android 11及更高版本中使用Toast时,需要考虑以下几点:
- ToastCompat必须从android.support.v4.app包中导入。
- ToastCompat的使用方法与Toast类似。
- ToastCompat可以设置文本、持续时间和显示位置。
- ToastCompat可以通过调用show()方法来显示Toast。
结论
Android 11中,对Toast的实现进行了更改,使其成为一个系统级服务,而不是一个应用程序级组件。因此,应用程序无法再直接创建和显示Toast,而必须使用新的ToastCompat。ToastCompat的使用方法与Toast类似,但需要从android.support.v4.app包中导入。