onBackPressed 已弃用,使用 AndroidX API 实现Android 13对预测性返回手势(predictive back gesture)的支持

Android 13(API 级别 33)及更高版本中的全新用户体验(提供更具预测性的返回手势导航)

简介

onBackPressed method was deprecated in API level

Android 13(API level 33)开始,onBackPressed 已弃用,后退事件处理正在转向提前模型(ahead-of-time model),并且不应使用 Activity#onBackPressed()KeyEvent#KEYCODE_BACK 来处理后退事件(后退手势或后退按钮的单击)。应使用 Activity#getOnBackInvokedDispatcher() .registerOnBackInvokedCallback(priority, callback) 注册 OnBackInvokedCallback

如果将应用程序更新到 API level 33,代码中会看到此错误:'onBackPressed(): Unit' is deprecated. Overrides deprecated member in 'androidx.core.app.ComponentActivity'. Deprecated in Java

onBackPressed method


如果无法使用 AndroidX 还提供了其他选项用于处理此功能:

  • 对于无法使用 AndroidX 的应用 - 使用在 Android 13 中的 OnBackInvokedDispatcher 和 OnBackInvokedCallback 类,无需 AndroidX 即可使用这些 ahead-of-time API。如需了解详细信息,请参阅文档
  • 对于暂时无法迁移的应用 - 如果暂时无法迁移到 AndroidX 库或最新 API,可以选择停用预测性“返回”手势。如需了解详细信息,请参阅文档

使用 AndroidX API 实现预测性返回手势

如需支持预测性返回手势,您需要使用 OnBackPressedCallback AppCompat 1.6.0-alpha05  (AndroidX) 或更高版本的 API,或使用新的 OnBackInvokedCallback API level 33 平台 API。

1. 在项目中添加所需的依赖项

dependencies {
// 添加 1.6.0-alpha05 或更高版本
implementation "androidx.activity:activity:1.6.0-alpha05"

2. 启用预测性“返回”手势

AndroidManifest.xml 中将 enableOnBackInvokedCallback 设置为 true

<application
   ...
   android:enableOnBackInvokedCallback="true" // Enables this feature.
   ... >
...
</application>

3. 声明并注册 OnBackPressedCallback 来处理返回手势

  • 处理 Activity 中的返回手势

    fun AppCompatActivity.onBackPressed(isEnabled: Boolean, callback: () -> Unit) { 
        onBackPressedDispatcher.addCallback(this, 
            object : OnBackPressedCallback(isEnabled) {
                override fun handleOnBackPressed() {
                    callback()
                }
            })
    }
    
    class ExampleActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_example)
    
            onBackPressed(true) {
                 // TODO
            }
         }
    }
    
  • 处理 Fragment 中的返回手势

    fun FragmentActivity.onBackPressed(callback: () -> Unit) { 
        onBackPressedDispatcher.addCallback(this, 
            object : OnBackPressedCallback(true) { 
                override fun handleOnBackPressed() { 
                    callback() 
                } 
            } 
        ) 
    } 
    
    class ExampleFragment : Fragment() { 
        override fun onCreate(savedInstanceState: Bundle?) { 
            super.onCreate(savedInstanceState)
    
            requireActivity().onBackPressed {
                 // TODO
            }
         }
    }
    

4. 测试预测性返回手势动画

从 Android 13 最终版本开始,能够通过启用一个开发者选项来测试返回主屏幕动画。

  1. 打开 设置 > 系统 > 开发者选项
  2. 选择预测性返回手势动画
  3. 启动更新后的应用,然后执行返回手势,看看实际运行效果。

如果其他不清楚的地方参加官方文档和 Codlabs 示例:

https://developer.android.com/guide/navigation/predictive-back-gesture

https://codelabs.developers.google.com/handling-gesture-back-navigation


作者:ITmob
来源:ITmob.cn
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×