自定义菜单

更新时间: 2022/10/12 05:51:00

网易会议组件 NEMeetingKit 为您提供了一套会议中自定义菜单的接口,允许您对会议中的菜单进行更个性化的定制。

功能介绍

NEMeetingKit 支持底部 Toolbar 菜单与更多展开菜单两个区域的菜单定制,包括:

  • 支持设置菜单项图标。
  • 支持自定义 SDK 内置菜单与外部注入菜单的排序。
  • 支持设置菜单显示规则,包括:始终可见、仅普通参会者可见、仅主持人可见。
  • 支持无状态菜单项和有状态菜单项,且支持点击有状态的菜单项后触发状态迁移,并更新菜单的 UI 展示。
  • 支持显示或隐藏 SDK 的内置菜单。
  • 支持修改 SDK 内置菜单的 UI 展示。

注意事项

自定义菜单时,您需要通过 options 参数进行配置,但此参数仅支持在入会前完成设置,在会议中设置不会生效。

配置 Toolbar 菜单列表

在创建会议、加入会议或匿名入会时,设置 options 相关参数。

    private void configToolbarMenus(NEMeetingOptions options) {
        //1. 创建Toolbar菜单列表构建类,列表默认包含:"音频""视频""屏幕共享""参会者""管理参会者"
        NEMenuItemListBuilder toolbarMenuBuilder = NEMenuItemListBuilder.toolbarMenuBuilder();
        //2. 不显示SDK内置"音频"菜单
        toolbarMenuBuilder.removeMenuById(NEMenuIDs.MIC_MENU_ID);
        //3. 修改"视频"菜单
        NEMeetingMenuItem sdkCameraMenu = toolbarMenuBuilder.getMenuById(NEMenuIDs.CAMERA_MENU_ID);
        //3.1 修改菜单可见性为"仅主持人可见"
        sdkCameraMenu.setVisibility(NEMenuVisibility.VISIBLE_TO_HOST_ONLY);
        //3.2 修改菜单未选中状态下的图标
        if (sdkCameraMenu instanceof NECheckableMenuItem) {
            ((NECheckableMenuItem) sdkCameraMenu).getUncheckStateItem().setIcon(R.drawable.icon);
        }
        //4. 在列表第2个位置添加一个单状态菜单
        toolbarMenuBuilder.addMenu(1,
                new NESingleStateMenuItem(100, NEMenuVisibility.VISIBLE_ALWAYS,
                        new NEMenuItemInfo("菜单名称", R.drawable.icon))
        );
        //5. 配置完成,设置参数字段
        options.fullToolbarMenuItems = toolbarMenuBuilder.build();
    }

配置更多展开菜单列表

  1. 在创建会议、加入会议或匿名入会时,设置 options 相关参数。

        private void configMoreMenus(NEMeetingOptions options) {
            //1. 创建更多菜单列表构建类,列表默认包含:"邀请"、"聊天"
            NEMenuItemListBuilder moreMenuBuilder = NEMenuItemListBuilder.moreMenuBuilder();
            //2. 添加一个多选菜单项
            moreMenuBuilder.addMenu(new NECheckableMenuItem(
                            100, NEMenuVisibility.VISIBLE_ALWAYS,
                            new NEMenuItemInfo("菜单-未选中", R.drawable.icon),
                            new NEMenuItemInfo("菜单-选中", R.drawable.icon)
                    )
            );
            //3. 配置完成,设置参数字段
            options.fullMoreMenuItems = moreMenuBuilder.build();
        }
    
  2. 注册回调接口 setupMenuClickListener 开始监听,并在回调方法中处理相应事件。

        // 监听"菜单点击",只需设置一次即可,不用每次入会都进行设置
        private void setupMenuClickListener() {
            NEMeetingKit.getInstance().getMeetingService()
                    .setOnInjectedMenuItemClickListener(new NEMeetingOnInjectedMenuItemClickListener() {
    
                        @Override
                        public void onInjectedMenuItemClick(Context context,
                                                            NEMenuClickInfo clickInfo, NEMeetingInfo meetingInfo, NEMenuStateController stateController) {
                            //1. 获取被点击菜单项ID
                            final int id = clickInfo.getItemId();
                            //2. 如果是多状态菜单,获取被点击时的状态
                            if (clickInfo instanceof NEStatefulMenuClickInfo) {
                                // 菜单项点击时的选中状态
                                final boolean isChecked = ((NEStatefulMenuClickInfo) clickInfo).isChecked();
                            // 3. 控制菜单项的状态迁移
                                final boolean needTransition = conditionCheck();
                                stateController.didStateTransition(needTransition, null);
                            }
                        }
                    });
        }
    

相关参考

API 参考

网易会议 NEMeetingKit Android 端的自定义菜单相关类与接口主要位于 com.netease.meetinglib.sdk.menu 包内,其中对关键类、接口和字段的介绍如下。

自定义菜单项相关

类/接口 描述
NEMenuVisibility 菜单项可见性的枚举值。
NEMenuItemInfo 自定义菜单项的 UI 展示。自定义一个标题与图标。
NEMeetingMenuItem 菜单项抽象基类。自定义菜单 ID 与菜单可见性,无法实例化。
NESingleStateMenuItem 单状态菜单项实现类。此类菜单始终展示相同的标题与图标。
NECheckableMenuItem 双状态菜单项实现类。此类菜单包括选中和非选中两个状态,点击后可切换状态,并展示与当前状态对应的 UI。

监听点击菜单项操作相关

类/接口 描述
NEMenuClickInfo 点击单状态菜单项时的描述信息。只包含菜单 ID。
NEStatefulMenuClickInfo 点击多状态菜单项时的描述信息。包含菜单 ID 与点击菜单时的菜单状态。
NEMenuStateController 菜单项状态迁移控制器接口。可控制是否进行菜单项的状态迁移。
NEMeetingOnInjectedMenuItemClickListener 菜单项点击事件监听回调。该回调仅在点击注入菜单项时返回。

菜单项帮助相关

描述
NEMenuIDs 定义 SDK 内置菜单的 ID。
NEMenuItems 获取 SDK 内置菜单项的实例。
NEMenuItemListBuilder 菜单列表构建帮助类。

菜单项注入相关

字段 说明
NEMeetingOptions#fullToolbarMenuItems 配置会议中Toolbar菜单的完整列表。
NEMeetingOptions#fullMoreMenuItems 配置会议中更多展开菜单的完整列表。

菜单图标规格说明

添加自定义菜单项时,需要指定一个标准 png 或 jpg 格式的图标资源。请将对应资源放置在 drawable 目录下,并在创建菜单项时使用对应的资源 ID(如 R.drawable.icon 作为参数。

图标尺寸规格如下:

dpi 图标尺寸
mdpi 24px*24px
xhdpi 48px*48px

SDK 内置菜单项

NEMeetingKit 目前内置了以下菜单项,您可根据需要调整内置菜单项的位置、标题、图标和可见性。

菜单项
菜单 ID
菜单项实例对象
类型
是否允许在Toolbar菜单中显示
是否允许在更多展开菜单中显示
音频 NEMenuIDs#MIC_MENU_ID NEMenuItems#micMenu() NECheckableMenuItem
视频 NEMenuIDs#CAMERA_MENU_ID NEMenuItems#cameraMenu() NECheckableMenuItem
屏幕共享 NEMenuIDs#SCREEN_SHARE_MENU_ID NEMenuItems#screenShareMenu() NECheckableMenuItem
参会者 NEMenuIDs#PARTICIPANTS_MENU_ID NEMenuItems#participantsMenu() NESingleStateMenuItem
管理参会者 NEMenuIDs#MANAGE_PARTICIPANTS_MENU_ID NEMenuItems#managerParticipantsMenu() NESingleStateMenuItem
邀请 NEMenuIDs#INVITE_MENU_ID NEMenuItems#inviteMenu() NESingleStateMenuItem
聊天 NEMenuIDs#CHAT_MENU_ID NEMenuItems#chatMenu() NESingleStateMenuItem
白板 NEMenuIDs#WHITEBOARD_ID NEMenuItems#whiteBoardShareMenu() NECheckableMenuItem
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 注意事项
  • 配置 Toolbar 菜单列表
  • 配置更多展开菜单列表
  • 相关参考
  • API 参考
  • 自定义菜单项相关
  • 监听点击菜单项操作相关
  • 菜单项帮助相关
  • 菜单项注入相关
  • 菜单图标规格说明
  • SDK 内置菜单项