You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:35:37