返回

Android 11适配指南之Toast解析

Android

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包中导入。