首页 文章

Codenameone表单添加了另一个 Headers ,而不是在添加工具栏时更新

提问于
浏览
1

在我的Codenameone应用程序中向工具栏添加工具栏时,我遇到了一个奇怪的问题 . 如果我在表单上设置了一个工具栏,它会显示另一个 Headers ,其中包含工具栏汉堡包和新 Headers ,而不是像我期望的那样替换它 . 它看起来像这样:
enter image description here

当我在Codenameone模拟器中运行时,功能可以正常替换旧 Headers ,但是当我进行Android构建并在Nexus 5(6.0.1)上运行时,我得到图像中显示的这种奇怪的行为 . 后箭头和“12 of 12”是上一个 Headers 的 Headers

这是我的代码,我在这里做了什么错误的工具栏用法?

void goShowResource(final Form previousForm) {
    previous = previousForm;
    final Toolbar bar = new Toolbar();
    final Form rd = new Form("resource details");
    final Resource thisResource = this;

    rd.setToolbar(bar);

    bar.addCommandToSideMenu(new Command("command 1") {
        @Override
        public void actionPerformed(ActionEvent evt) {
            AddResources ar = new AddResources(settings, thisResource);
            ar.goAddResources(rd);
        }
    });

    bar.addCommandToSideMenu(new Command("command 2") {
        @Override
        public void actionPerformed(ActionEvent evt){
            UpdateResource ur = new UpdateResource(settings);
            ur.goUpdateResource(rd, thisResource);
        }
    });

    rd.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
    showDetails(rd);
    rd.show();
}

编辑:添加个人信息,如果我打开侧面菜单一次,顶部的旧 Headers 栏缩小了,我留下了单个正确但格式不正确的 Headers 区域 .

2 回答

  • 1

    对于应用程序中的所有表单,您应该使用 Toolbar ,或者在使用工具栏时禁用默认的本机菜单栏 . 您可以通过编辑主题并选择常量选项卡然后按"Add"并选择 commandBehavior=Side 来执行后者 .

    Android当前默认使用本机 ActionBar 行为, Toolbar 隐式覆盖,但是当从本机到轻量级组件发生转换时,事情会变得非常毛茸茸(也可能看起来不自然),所以我们建议选择一个UI范例并继续使用它 .

    由于 ActionBar 是一个易变的API,我们建议 Toolbar 继续前进,因为它更加可定制,并为我们提供了很多控制 .

  • 1

    这可以通过在设置工具栏后从表单中删除所有命令来修复,然后根据需要向工具栏添加新的后退命令 .

    void goShowResource(final Form previousForm) {
        previous = previousForm;
        final Toolbar bar = new Toolbar();
        final Form rd = new Form("resource details");
        final Resource thisResource = this;
    
        rd.removeAllCommands();
        rd.setBackCommand(null);
        rd.setToolbar(bar);
    
        //Add back command
        Command back = new Command("back") {
    
            @Override
            public void actionPerformed(ActionEvent evt) {
                previousForm.showBack();
            }
        };
        bar.addCommandToSideMenu(back);
    
        bar.addCommandToSideMenu(new Command("command 1") {
            @Override
            public void actionPerformed(ActionEvent evt) {
                AddResources ar = new AddResources(settings, thisResource);
                ar.goAddResources(rd);
            }
        });
    
        bar.addCommandToSideMenu(new Command("command 2") {
            @Override
            public void actionPerformed(ActionEvent evt){
                UpdateResource ur = new UpdateResource(settings);
                ur.goUpdateResource(rd, thisResource);
            }
        });
    
        rd.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        showDetails(rd);
        rd.show();
    }
    

相关问题