Codenameone 为什么可以';我不能选择侧菜单中的第一项吗?

Codenameone 为什么可以';我不能选择侧菜单中的第一项吗?,codenameone,Codenameone,我有一个非常简单的项目,只有一个表单和五个命令。我将每个命令同时放在侧菜单和溢出菜单上。它们在溢出菜单上都可以正常工作,但在侧菜单上,第一个菜单永远不起作用。其他四个可以正常工作,但第一个命令失败。通常,当我触摸它时,什么都不会发生。偶尔它会被选中,并保持选中状态,直到我单击另一个。但是命令永远不会执行。我做错什么了吗?还是这是一只虫子 它在模拟器上运行良好。它在运行安卓5.1的4G LTE安卓Moto E(第二代)上失败。我没有在其他手机或平板电脑上运行过 import com.codenam

我有一个非常简单的项目,只有一个表单和五个命令。我将每个命令同时放在侧菜单和溢出菜单上。它们在溢出菜单上都可以正常工作,但在侧菜单上,第一个菜单永远不起作用。其他四个可以正常工作,但第一个命令失败。通常,当我触摸它时,什么都不会发生。偶尔它会被选中,并保持选中状态,直到我单击另一个。但是命令永远不会执行。我做错什么了吗?还是这是一只虫子

它在模拟器上运行良好。它在运行安卓5.1的4G LTE安卓Moto E(第二代)上失败。我没有在其他手机或平板电脑上运行过

import com.codename1.ui.*;
import com.codename1.ui.events.ActionEvent;
import com.codename1.ui.layouts.BoxLayout;
import com.codename1.ui.plaf.UIManager;

@SuppressWarnings("HardCodedStringLiteral")
public class Playground {

  private Form current;
  private MainForm mainForm;
  public void init(Object context) {
    UIManager.initFirstTheme("/theme");
  }

  public void start() {
    if (current != null) {
      current.show();
      return;
    }

    Toolbar.setGlobalToolbar(true);
    mainForm = new MainForm();
    Form hi = mainForm;
    hi.show();
    current = hi;
  }

  public void stop() {
  }

  public void destroy() {
  }

  private class MainForm extends Form {
    MainForm() {
      super("Test of Hamburger Menu");
      Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_BUTTON_BAR_TITLE_RIGHT);
      setLayout(new BoxLayout(BoxLayout.Y_AXIS));

      Toolbar toolbar = new Toolbar();
      setToolbar(toolbar);

      Command dummyOne = new PlaygroundCommand("One");
      Command dummyTwo = new PlaygroundCommand("Two");
      Command dummyThree = new PlaygroundCommand("Three");
      Command dummyFour = new PlaygroundCommand("Four");
      Command dummyFive = new PlaygroundCommand("Five");

      toolbar.addCommandToSideMenu(dummyOne);
      toolbar.addCommandToSideMenu(dummyTwo);
      toolbar.addCommandToSideMenu(dummyThree);
      toolbar.addCommandToSideMenu(dummyFour);
      toolbar.addCommandToSideMenu(dummyFive);
      toolbar.addCommandToOverflowMenu(dummyOne);
      toolbar.addCommandToOverflowMenu(dummyTwo);
      toolbar.addCommandToOverflowMenu(dummyThree);
      toolbar.addCommandToOverflowMenu(dummyFour);
      toolbar.addCommandToOverflowMenu(dummyFive);
    }
  }

  private void doCommand(ActionEvent evt) {
    Dialog.show("Command", evt.getCommand().toString(), Dialog.TYPE_INFO, null, "OK", null);
  }

  private class PlaygroundCommand extends Command {
    PlaygroundCommand(String name) {
      super(name);
    }

    @Override
    public void actionPerformed(final ActionEvent evt) {
      doCommand(evt);
    }
  }
}
不要这样做:

Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_BUTTON_BAR_TITLE_RIGHT);
我们通常在
start
中初始化表单,而不是在
init
方法中初始化表单,因为它更像是一个应用程序流,而不是实际的初始化。所以这两件事中的一件可能会导致这种奇怪的行为。

不要这样做:

Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_BUTTON_BAR_TITLE_RIGHT);

我们通常在
start
中初始化表单,而不是在
init
方法中初始化表单,因为它更像是一个应用程序流,而不是实际的初始化。所以这两件事中的一件可能是导致这种奇怪行为的原因。

谢谢你的建议。很高兴知道这一点,尽管它没有解决问题。现在,当我触摸第一个菜单项时,它通常会亮起,但它仍然不会执行。我修改了上面的代码,以显示我刚刚测试的代码的外观。我还尝试完全删除setCommandBehavior()调用,但仍然没有解决它。我认为这与状态栏区域的特殊处理有关。如果第一个命令非常高,它可能会与用于下拉状态栏区域的事件发生冲突(在Android中是本机的),这是有道理的。在我的实验中,我发现如果我瞄准第一个项目的底部,我有时可以激活它。(我使用了一个主题,在这个主题中我放大了菜单项的大小。)我们能够复制这个主题,但我不确定这是否是我们可以/应该解决的问题。大多数操作系统(包括iOS和Android)都保留了设备的顶部区域,因此您不应该在那里放置任何东西。正确的解决方法是在默认情况下对
SideCommand
UIID进行更好的大小调整/填充。感谢您的建议。很高兴知道这一点,尽管它没有解决问题。现在,当我触摸第一个菜单项时,它通常会亮起,但它仍然不会执行。我修改了上面的代码,以显示我刚刚测试的代码的外观。我还尝试完全删除setCommandBehavior()调用,但仍然没有解决它。我认为这与状态栏区域的特殊处理有关。如果第一个命令非常高,它可能会与用于下拉状态栏区域的事件发生冲突(在Android中是本机的),这是有道理的。在我的实验中,我发现如果我瞄准第一个项目的底部,我有时可以激活它。(我使用了一个主题,在这个主题中我放大了菜单项的大小。)我们能够复制这个主题,但我不确定这是否是我们可以/应该解决的问题。大多数操作系统(包括iOS和Android)都保留了设备的顶部区域,因此您不应该在那里放置任何东西。正确的解决方案是在默认情况下对
SideCommand
UIID进行更好的大小调整/填充。