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

Uno平台Android端MenuFlyoutSubItem子菜单超出可视区域问题咨询

问题根源

这个问题不是代码配置错误导致,是Uno平台Android端的原生适配缺陷:MenuFlyoutSubItem在计算子菜单弹出坐标时,默认会以父菜单项的右侧边缘为锚点向右展开,没有判断父菜单本身已经贴靠屏幕右侧边缘的场景,最终导致子菜单超出可视区域。

修复方案

按优先级从高到低可选:

  • 方案1:升级Uno平台版本
    该布局bug已经在Uno 4.9及以上稳定版本中被修复,直接将项目中所有Uno相关NuGet包(Uno.UI、Uno.UI.Android等)升级到最新稳定版,即可直接解决问题,无需修改业务代码。
  • 方案2:针对Android平台单独配置子菜单位置
    如果暂时无法升级框架版本,可以通过Uno的平台条件标记,强制Android端的二级子菜单从父菜单项左侧展开,调整后的代码如下:
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="10">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
    
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
    
        <Button Grid.Column="1" Grid.Row="0">
            <SymbolIcon Symbol="More"/>
            <Button.Flyout>
                <MenuFlyout Placement="BottomEdgeAlignedRight">
                    <MenuFlyoutItem Text="Item 1"/>
                    <!-- 仅Android平台生效,指定子菜单向左弹出 -->
                    <MenuFlyoutSubItem Text="Sub Items"
                                        xmlns:android="http://uno.ui/android"
                                        android:MenuFlyoutSubItem.Placement="Left">
                        <ToggleMenuFlyoutItem Text="Sub Item 1"/>
                        <ToggleMenuFlyoutItem Text="Sub Item 2"/>
                        <ToggleMenuFlyoutItem Text="Sub Item 3"/>
                    </MenuFlyoutSubItem>
                </MenuFlyout>
            </Button.Flyout>
        </Button>
    </Grid>
    
  • 方案3:自定义Flyout替代原生MenuFlyout
    如果以上方案都不生效,可以放弃原生MenuFlyoutSubItem,改用自定义的Flyout控件嵌套实现二级菜单效果,完全自定义弹出位置和布局逻辑,彻底规避框架适配问题。

内容的提问来源于stack exchange,提问作者Stan V.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:27:04