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

Xamarin.Forms重写工具栏返回按钮及OnOptionsItemSelected不触发问题

解决方案

第一步:调整项目目标框架

Xamarin.Android 项目需将目标框架设置为 Android 10.0 (Q) 及以上版本才能正常兼容 AndroidX 相关组件:

  • 右键 Android 项目 → 「属性」→「应用程序」
  • 将「目标 Android 版本」修改为 Android 10.0 或更高版本,最低 Android 版本可根据业务需求自行调整

第二步:清理并重新安装依赖包

依赖包安装残留会导致命名空间识别异常,按以下步骤清理重装:

  1. 卸载项目中所有已安装的 Xamarin.AndroidX 相关包,关闭 Visual Studio
  2. 删除项目根目录下的packages文件夹,同时删除 Android 项目目录下的bin、obj文件夹
  3. 重新打开 Visual Studio,依次安装最新稳定版的Xamarin.AndroidX.AppCompat、Xamarin.AndroidX.AppCompat.Widget NuGet 包

第三步:修正命名空间引用与类继承关系

  1. 在 MainActivity.cs 顶部添加如下引用,额外添加别名避免系统自带 Toolbar 类型冲突:
using AndroidX.AppCompat.App;
using AndroidX.AppCompat.Widget;
using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
  1. 确认 MainActivity 的父类为AppCompatActivity,而非原生Activity或旧版 AppCompat 下的 Activity:
public class MainActivity : AppCompatActivity

第四步:验证布局文件配置

确认你使用的 Toolbar 布局标签为 AndroidX 版本,打开 Toolbar 对应的布局文件(一般为Resources/layout/xxx.axml),替换为如下写法:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

额外优化建议

你现有代码中硬编码的返回按钮 ID 16908332 可替换为系统常量Android.Resource.Id.Home,兼容性更好,不受系统版本差异影响:

public override bool OnOptionsItemSelected(IMenuItem item) {
    if (item.ItemId == Android.Resource.Id.Home)
    {
        // 你的自定义逻辑
        return true; // 拦截事件自行处理则返回true,要走默认逻辑则调用base方法
    }
    return base.OnOptionsItemSelected(item);
}

内容的提问来源于stack exchange,提问作者yeetyeet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:15:04