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