Delphi 11.3 Android ActionBar溢出菜单不显示及事件绑定求助
Delphi 11.3 Android 问题解决方案:ActionBar溢出菜单+ListBox项事件绑定
一、ActionBar溢出菜单无法显示的解决步骤
确认ActionBar基础属性
检查窗体ActionBar组件的Visible设为True,ShowOverflowButton设为True(Delphi 11.3默认值通常为True,但需手动确认)。使用菜单资源文件(推荐)
- 右键项目→添加→新建项→选择「菜单资源」,创建菜单文件(如
MainMenu.rc)。 - 在菜单设计器中添加菜单项,设置
Visible/Enabled为True,并给每个项命名(如miSettings)。 - 在窗体
OnCreate事件中加载菜单:procedure TForm1.FormCreate(Sender: TObject); begin ActionBar.Menu := MainMenu1; // MainMenu1为你创建的菜单组件 end;
- 右键项目→添加→新建项→选择「菜单资源」,创建菜单文件(如
检查Android主题配置
打开Project→Options→Application→Appearance,选择带ActionBar的主题(如Light/Dark,避免NoActionBar类主题)。动态创建菜单的正确写法
如果用代码动态生成,必须指定菜单项强制放入溢出菜单:procedure TForm1.FormCreate(Sender: TObject); var LMenuItem: JMenuItem; begin LMenuItem := ActionBar.Menu.add('设置'); // 强制放入溢出菜单,不直接显示在ActionBar上 LMenuItem.setShowAsAction(TJMenuItem.JavaClass.SHOW_AS_ACTION_NEVER); // 绑定点击事件 LMenuItem.setOnMenuItemClickListener( TMenuItemClickListener.Create( procedure(AMenuItem: JMenuItem): Boolean begin ShowMessage('设置被点击'); Result := True; end ) ); end;
二、ListBox项绑定事件的实现方式
FMX与VCL的ListBox事件逻辑不同,以下两种常用实现方式:
方式1:利用ListBox的OnItemClick事件
直接给ListBox绑定OnItemClick,通过参数区分点击项:
procedure TForm1.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); begin if Item.Text = '设置' then ShowMessage('点击了设置项') else if Item.Text = '关于' then ShowMessage('点击了关于项'); end;
适合简单场景,无需给每个Item单独绑定事件。
方式2:给单个ListBoxItem绑定OnClick事件
若需为每个Item定制逻辑,可在创建时绑定:
procedure TForm1.FormCreate(Sender: TObject); var LItem: TListBoxItem; begin // 创建"设置"项 LItem := TListBoxItem.Create(ListBox1); LItem.Text := '设置'; LItem.OnClick := procedure(Sender: TObject) begin ShowMessage('设置项被点击'); end; ListBox1.AddObject(LItem); // 创建"关于"项 LItem := TListBoxItem.Create(ListBox1); LItem.Text := '关于'; LItem.OnClick := procedure(Sender: TObject) begin ShowMessage('关于项被点击'); end; ListBox1.AddObject(LItem); end;
也可在设计时选中ListBox内的Item,在Object Inspector中手动设置OnClick事件(需在事件列表中手动查找,默认不显示)。
内容的提问来源于stack exchange,提问作者maurobio
相关产品推荐
相关产品推荐

