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

Delphi 11.3 Android ActionBar溢出菜单不显示及事件绑定求助

Delphi 11.3 Android 问题解决方案:ActionBar溢出菜单+ListBox项事件绑定

一、ActionBar溢出菜单无法显示的解决步骤

  • 确认ActionBar基础属性
    检查窗体ActionBar组件的Visible设为True,ShowOverflowButton设为True(Delphi 11.3默认值通常为True,但需手动确认)。

  • 使用菜单资源文件(推荐)

    1. 右键项目→添加→新建项→选择「菜单资源」,创建菜单文件(如MainMenu.rc)。
    2. 在菜单设计器中添加菜单项,设置Visible/Enabled为True,并给每个项命名(如miSettings)。
    3. 在窗体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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:17:15