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

如何不使用XML以编程方式为PopupMenu添加Switch菜单项

实现方案

无需XML代码即可实现,核心逻辑是动态创建Switch控件,通过MenuItem.setActionView()注入到菜单项中即可。

完整修改后代码

options.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View _view) {
        // 注意:这里建议用当前Activity作为上下文,不要用ApplicationContext,避免主题异常
        PopupMenu myPopupMenu = new PopupMenu(YourActivity.this, options);
        myPopupMenu.getMenu().add("Option 1");
        myPopupMenu.getMenu().add("Option 2");
        myPopupMenu.getMenu().add("Option 3");
        
        // 此处添加Switch菜单项
        MenuItem switchItem = myPopupMenu.getMenu().add("The Title of The Switch");
        // 动态创建Switch实例
        Switch switchView = new Switch(YourActivity.this);
        // 可自定义Switch的初始选中状态、样式等
        switchView.setChecked(false);
        // 将Switch设置为菜单项的自定义视图
        switchItem.setActionView(switchView);

        myPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                switch(item.getTitle().toString()) {
                    case "Option 1": {
                        onFirstOptionClicked();
                        break;
                    }
                    case "Option 2": {
                        onSecondOptionClicked();
                        break;
                    }
                    case "Option 3": {
                        onThirdOptionClicked();
                        break;
                    }
                    case "The Title of The Switch": {
                        // 获取Switch实例,读取选中状态
                        Switch sw = (Switch) item.getActionView();
                        // 切换选中状态
                        boolean isChecked = !sw.isChecked();
                        sw.setChecked(isChecked);
                        // 此处isChecked就是当前Switch的选中状态,可直接用于业务逻辑
                        break;
                    }
                }
                return true;
            }
        });
        myPopupMenu.show();
    }
});

注意事项

  • 代码中的YourActivity需要替换为你当前页面的Activity实例
  • 如果需要点击Switch控件本身即可切换状态,可以给Switch单独设置OnCheckedChangeListener处理逻辑,不需要依赖菜单项点击事件

内容的提问来源于stack exchange,提问作者Omar Hemaia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:09:03