【问题标题】:Listen to side menu / hamburger menu clicked event收听侧边菜单/汉堡菜单点击事件
【发布时间】:2016-10-12 15:10:05
【问题描述】:

我想检测何时单击侧边菜单或汉堡菜单。

这是来自一个无法运行的准系统 hello world 项目的代码:

    Form hi = new Form("Hi World");
    Toolbar bar = new Toolbar();
    hi.setToolbar(bar);
    bar.addCommandToSideMenu(new Command("test 1"));
    bar.addCommandToSideMenu(new Command("test 2"));
    hi.addComponent(new Label("Hi World"));

    bar.getMenuBar().addPointerPressedListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent evt) {
           System.out.println("Side menu or Hamburner Menu is clicked");
        }
    });
    hi.show();

我希望当我单击侧边菜单或汉堡菜单时会看到打印的字符串。但事实并非如此。

如何监听汉堡菜单点击事件。

谢谢,

3lix

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    由于 Toolbar 只是 Form 顶部的 BorderLayout Container,因此您可以找到侧边菜单按钮并在其上添加侦听器。

    Button sideBtn = (Button)((BorderLayout)bar.getLayout()).getEast();
    

    请注意,这是一个未记录的 API,因此将来可能会中断,侧边按钮未出于某种原因故意暴露,请重新考虑您要执行的操作。

    【讨论】:

    • 好吧,我不完全明白为什么侧边按钮根本没有故意暴露。我不明白你为什么不支持通过 api 调用来监听打开侧菜单事件。如果您能指导我采用更好的方法,我会重新考虑我正在尝试做的事情。简而言之,我试图在侧边菜单打开时为关闭表单着色,然后在侧边菜单关闭时将其取消着色。出于着色/不着色的目的,我在 glassPane 上填充矩形。我的案子无论如何都不是一个表演障碍,但我喜欢暗示表格不在焦点的视觉线索
    • 如果您有任何建议(对我来说更好的方法),或者您认为我们可以在未来为此提供 API 调用,如果事实上您看到了它的用例,请告诉我其他人可能需要。我想补充一点,我还检测菜单何时打开,以便在侧边菜单打开之前突出显示侧边菜单中最后选择的选项/命令。这是我目前使用的两个常见用例。
    • 我认为您的意思是 getWest()。我不能得到一个以上的事件。这第一次有效,但随后停止工作: Button sideBtn = (Button)((BorderLayout)bar.getLayout()).getWest(); sideBtn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent evt) { System.out.println("侧边菜单或火腿菜单被点击"); } });我现在开始更了解你的担忧了。我认为侧面按钮还附加了其他事件来打开/关闭侧面菜单。
    • 此外,菜单实际上是作为不同的表单实现的,因此尝试在原始玻璃窗格上放置一些东西可能会很棘手。这听起来像是 SideMenu 本身的一个功能,我认为这种着色在拖动时也应该改变它的 alpha。恐怕这需要对侧边菜单的实现进行一些调整,您可以提交 RFE 或在 github 上 fork 项目实现它并发送拉取请求
    • 我想指出,如果侧边按钮由于某种原因没有暴露,那么 API 应该通过提供监听器来进行补偿。 GUI API 为诸如弹出菜单之类的事件提供侦听器是非常标准的,但令人沮丧的是 CodenameOne 并没有这样做。侦听器方法还可以在不破坏现有应用程序的情况下更轻松地重写侧菜单代码。我还需要收听侧面菜单事件,并且我不得不编写一些笨拙的代码来绕过设计。应该重新考虑迫使开发人员编写笨拙代码的 API。
    【解决方案2】:

    另一种方法是禁用侧边菜单图标,然后像我们在此模板中所做的那样自己添加按钮:http://www.codenameone.com/blog/template-mobile-material-screens-ui-kit.html

    【讨论】:

    • 我明白了!这是一个非常有趣的方法!谢谢您的帮助。我认为你的回答解决了这个问题
    猜你喜欢
    • 1970-01-01
    • 2017-05-29
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多