Delphi 12.2 FireMonkey Android右上角悬浮弹出菜单实现问题
安卓平台Delphi应用实现悬浮式上下文菜单
在以安卓为主要平台的应用中,我使用常规MultiView控件作为菜单,希望实现点击右上角三点按钮时,弹出类似Firefox、WhatsApp安卓版的悬浮式上下文菜单。样式并非重点,我确信存在简单解决方案但尚未实现。当前使用Delphi 12.2,测试设备为搭载Android 13、14的三星手机。
已尝试以下方案但均未成功:
- 常规Delphi PopUp Menu:在安卓上无法使用;
- 绑定动画的TListBox:点击按钮可显示,但并非悬浮层,会导致UI移位,已测试ListBox的Align属性(右、无)及TabControl的Align属性(客户区、内容);
- 绑定动画的TPanel:效果类似TListBox,无Z序。
三点按钮点击事件代码
// OnClick handler for the 3-dot button // works, but moves all controls on my TTabControl to the left :- procedure TForm1.SpeedButton1Click(Sender: TObject); begin ListBoxMenu.Visible := not ListBoxMenu.Visible; if ListBoxMenu.Visible then begin ListBoxMenu.ApplyStyleLookup; ListBoxMenu.RealignContent; end; end;
FMX文件头部代码
// head of .fmx file object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 480 ClientWidth = 640 FormFactor.Width = 320 FormFactor.Height = 480 FormFactor.Devices = [Desktop] DesignerMasterStyle = 0 object ToolBar1: TToolBar Size.Width = 640.000000000000000000 Size.Height = 46.000000000000000000 Size.PlatformDefault = False TabOrder = 0 object SpeedButton1: TSpeedButton Align = Right Margins.Right = 5.000000000000000000 Position.X = 589.000000000000000000 Size.Width = 46.000000000000000000 Size.Height = 46.000000000000000000 Size.PlatformDefault = False StyleLookup = 'detailstoolbutton' Text = 'SpeedButton1' OnClick = SpeedButton1Click end end object ListboxMenu: TListBox Align = Right // also tried None Margins.Right = 30.000000000000000000 Position.X = 528.000000000000000000 Position.Y = 49.000000000000000000 Size.Width = 107.000000000000000000 Size.Height = 144.000000000000000000 Size.PlatformDefault = False TabOrder = 1 Visible = False DisableFocusEffect = True DefaultItemStyles.ItemStyle = '' DefaultItemStyles.GroupHeaderStyle = '' DefaultItemStyles.GroupFooterStyle = '' Viewport.Width = 103.000000000000000000 Viewport.Height = 140.000000000000000000 object ListBoxItem1: TListBoxItem TabOrder = 0 Text = 'MenuItem 0' OnClick = ListBoxItem1Click end object ListBoxItem2: TListBoxItem Position.Y = 19.000000000000000000 TabOrder = 1 Text = 'MenuItem 1' end object ListBoxItem3: TListBoxItem Position.Y = 38.000000000000000000 TabOrder = 2 Text = 'MenuItem 2' end end object TabControl1: TTabControl Align = Client // also tried Contents Size.Width = 640.000000000000000000 Size.Height = 434.000000000000000000 Size.PlatformDefault = False TabIndex = 1 TabOrder = 4 TabPosition = PlatformDefault Sizes = ( 640s 408s 640s 408s) object TabItem1: TTabItem CustomIcon = < item end> TextSettings.Trimming = None IsSelected = False Size.Width = 69.000000000000000000 Size.Height = 26.000000000000000000 Size.PlatformDefault = False StyleLookup = '' TabOrder = 0 Text = 'TabItem1' ExplicitSize.cx = 86.000000000000000000 ExplicitSize.cy = 30.000000000000000000 end
内容的提问来源于stack exchange,提问作者Mockminister
相关产品推荐
相关产品推荐

