Xamarin.Forms重写工具栏返回按钮及OnOptionsItemSelected不触发问题
解决方案
第一步:调整项目目标框架
Xamarin.Android 项目需将目标框架设置为 Android 10.0 (Q) 及以上版本才能正常兼容 AndroidX 相关组件:
- 右键 Android 项目 → 「属性」→「应用程序」
- 将「目标 Android 版本」修改为 Android 10.0 或更高版本,最低 Android 版本可根据业务需求自行调整
第二步:清理并重新安装依赖包
依赖包安装残留会导致命名空间识别异常,按以下步骤清理重装:
- 卸载项目中所有已安装的 Xamarin.AndroidX 相关包,关闭 Visual Studio
- 删除项目根目录下的
packages文件夹,同时删除 Android 项目目录下的bin、obj文件夹 - 重新打开 Visual Studio,依次安装最新稳定版的
Xamarin.AndroidX.AppCompat、Xamarin.AndroidX.AppCompat.WidgetNuGet 包
第三步:修正命名空间引用与类继承关系
- 在 MainActivity.cs 顶部添加如下引用,额外添加别名避免系统自带 Toolbar 类型冲突:
using AndroidX.AppCompat.App; using AndroidX.AppCompat.Widget; using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
- 确认 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
相关产品推荐
相关产品推荐

