在Android MAUI应用中如何以编程方式打开菜单?
在Android MAUI应用中如何以编程方式打开菜单?
我完全懂你现在的处境——给带物理键盘的Android设备做MAUI应用,想通过快捷键调出右上角那三个点的溢出菜单,但试了Platform.CurrentActivity.OpenOptionsMenu()和OpenContextMenu()都没效果,而且你还没用到Shell,菜单都是在XML里加的ToolbarItem Order="Secondary",对吧?
其实问题出在MAUI的Toolbar和原生Android的OptionsMenu机制略有不同,直接调用Activity的方法没法触发AppCompat Toolbar的溢出菜单。你需要直接获取到MAUI页面对应的原生Toolbar实例,然后调用它的原生方法来打开菜单。
给你两种可行的实现方式:
方法一:通过Handler获取Toolbar实例
首先在你的ContentPage里先保存Toolbar的引用,之后在需要触发菜单的地方调用方法:
#if ANDROID using AndroidX.AppCompat.Widget; #endif private AndroidX.AppCompat.Widget.Toolbar _nativeToolbar; protected override void OnHandlerChanged() { base.OnHandlerChanged(); #if ANDROID // 获取页面的原生视图 var nativePageView = Handler?.PlatformView as Android.Views.View; if (nativePageView != null) { // 通过ID找到Toolbar控件(MAUI默认的Toolbar ID是toolbar) _nativeToolbar = nativePageView.FindViewById<AndroidX.AppCompat.Widget.Toolbar>(Resource.Id.toolbar); } #endif } // 在你处理快捷键的方法里,调用下面的代码打开菜单 private void OpenOverflowMenu() { #if ANDROID if (_nativeToolbar != null) { // 调用原生方法打开溢出菜单 _nativeToolbar.ShowOverflowMenu(); } #endif }
方法二:直接获取MAUI Toolbar的原生实例
你也可以直接通过MAUI的Toolbar静态属性获取对应的原生控件,代码更简洁:
#if ANDROID using AndroidX.AppCompat.Widget; using Microsoft.Maui.Controls.Platform; #endif private void OpenOverflowMenu() { #if ANDROID var toolbar = (Toolbar)Toolbar.MauiToolbar; toolbar.ShowOverflowMenu(); #endif }
这样调用之后,右上角的溢出菜单就会弹出来啦。另外要记得,这些代码要放在Android平台条件编译块里,避免其他平台编译出错。
备注:内容来源于stack exchange,提问作者Viri
相关产品推荐
相关产品推荐

