Android 13中OnBackPressed已弃用,如何在Xamarin.Android实现预测返回手势?
Xamarin.Android 替代弃用的 OnBackPressed 方法(Android 13+)
Android 13(API 33,对应Android T)中OnBackPressed方法已被官方弃用,以下是官方Java示例对应的Xamarin.Android C#实现,同时解决CS0672警告问题:
C# 转换实现
在你的Activity的OnCreate方法中添加以下代码,注册返回键回调:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 仅在Android 13及以上版本生效 if (BuildCompat.IsAtLeastT()) { OnBackInvokedDispatcher.RegisterOnBackInvokedCallback( OnBackInvokedDispatcher.PriorityDefault, new BackInvokedCallback() ); } } // 实现返回键回调逻辑 private class BackInvokedCallback : Java.Lang.Object, IOnBackInvokedCallback { public void OnBackInvoked() { // 这里编写原OnBackPressed方法中的业务逻辑 // 示例:判断是否可以返回上一页,否则关闭当前页面 // if (SupportFragmentManager.BackStackEntryCount > 0) // { // SupportFragmentManager.PopBackStack(); // } // else // { // Finish(); // } } }
解决CS0672警告
CS0672警告提示"成员重写了已过时的成员",通常是因为你仍保留了OnBackPressed的重写方法。根据兼容需求处理:
- 仅支持Android 13+:直接移除
OnBackPressed的重写代码,完全使用上述IOnBackInvokedCallback实现。 - 兼容旧版本:保留
OnBackPressed重写,添加[Obsolete]注解抑制警告,并在方法内做版本判断:
[Obsolete("Use IOnBackInvokedCallback for Android 13+ devices", false)] public override void OnBackPressed() { // 仅在Android 12及以下执行旧逻辑 if (!BuildCompat.IsAtLeastT()) { base.OnBackPressed(); } }
内容的提问来源于stack exchange,提问作者Niilo Poutanen
相关产品推荐
相关产品推荐

