2

画面上部の右側にハンバーガー メニューを作成し、左側に戻るボタンを作成するコードネーム 1 のアプリを作成しようとしていますが、動作させることができません。左側にハンバーガー メニュー、右側にボタンがあります。なりたい姿をイメージして描きました。戻るボタンは、コードではなくペイントで追加されます。 アプリ例の画像

以下は、右側のメニューを取得するために使用したコードです。

public class MainForm {
    public static Form mainForm;
    Command cmd_back, cmd_AboutTheApp;
    private enum SideMenuMode {
        SIDE, RIGHT_SIDE {
            public String getCommandHint() {
                return SideMenuBar.COMMAND_PLACEMENT_VALUE_RIGHT;
            }
        };

        public String getCommandHint() {
            return null;
        }
        public void updateCommand(Command c) {
            String h = getCommandHint();
            if(h == null) {
                return;
            }
            c.putClientProperty(SideMenuBar.COMMAND_PLACEMENT_KEY, h);
        }
    };
    SideMenuMode mode = SideMenuMode.RIGHT_SIDE;

    public void init(Object context) {
        theme = UIManager.initFirstTheme("/theme");
        UIManager.getInstance().setThemeProps(theme.getTheme theme.getThemeResourceNames()[0]));
        UIManager.getInstance().getLookAndFeel().setMenuBarClass(SideMenuBar.class);
        Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_SIDE_NAVIGATION);
    }

    public void start() {
        if(mainForm != null){
            mainForm.show();
            return;
        }
        mainForm = new Form();
        mainForm.setTitleComponent(title);
        mainForm.setLayout(new BorderLayout());
        addCommands(mainForm);
    }
    private void addCommands(Form f){
        cmd_Back = new Command("Back");
        final Button btn_Back = new Button("Back");
        cmd_Back.putClientProperty("TitleCommand", btn_Back);
        btn_BackButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                //do some thing
            }
        });
        cmd_AboutTheApp = new Command("About the app");
        final Button btn_AboutTheApp = new Button("About the app");
        cmd_AboutTheApp.putClientProperty("SideComponent", btn_AboutTheApp);
        btn_AboutTheApp.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                //do some thing
            }
        });
        mode.updateCommand(cmd_Back);
        f.addCommand(cmd_Back);

        mode.updateCommand(cmd_AboutTheApp);
        f.addCommand(cmd_AboutTheApp);
    }
}

AboutTheAppボタンの後に追加されるように戻るボタンを移動すると、戻るボタンは画面の右側だけでなく、右側にもあるメニューの右側にも表示されます。いろいろな方法を試しましたが、どれもうまくいかないようです

4

2 に答える 2

1

これを行うアプリがあります。Google Play (または App Store) で「Torquepower Diesel Cummins Engine」アプリを検索します。

  1. テーマ定数で、独自の rightSideMenuImage と rightSideMenuPressImage を設定しましたが、デフォルトのハンバーガー メニューで問題ない場合があります。

  2. 各フォームの beforeXXXX で、次のようなことを行います。

    super.beforePartNumberForm(f);
    
    Toolbar tb = createToolbar(f);
    
    createBackCommand(f, tb);
    addHelpX(tb);
    addViewCartX(tb);
    addCallTorquepowerX(tb);
    addReverseSwipe(f);
    
  3. ツールバーを作成する

    Toolbar createToolbar(Form f) {
    
        Toolbar tb = new Toolbar();
        f.setToolBar(tb);
    
        Label l = new Label();
        l.setIcon(res.getImage("tpd_logoZZ.png"));
    
        tb.setTitleComponent(l);
    
        return tb;
    }
    
  4. 戻るボタンを作る

    void createBackCommand(Form f, Toolbar tb) {
    
        Command c = new Command("") {
            @Override
            public void actionPerformed(ActionEvent evt) {
                back();
            }
        };
    
        c.setIcon(res.getImage("black_left_arrow-512.png"));
        c.setPressedIcon(res.getImage("grey_left_arrow-512.png"));
    
        // MUST set this before adding to toolbar, else get null pointer
        f.setBackCommand(c);
    
        tb.addCommandToLeftBar(c);
    }
    
  5. サイドメニューに必要なコマンドを追加します

    void addHelpX(Toolbar tb) {
        Command c = new Command("Help") {
            @Override
            public void actionPerformed(ActionEvent evt) {
                showForm("HelpForm", null);
            }
        };
    
        c.putClientProperty(SideMenuBar.COMMAND_PLACEMENT_KEY, SideMenuBar.COMMAND_PLACEMENT_VALUE_RIGHT);
        c.putClientProperty("SideComponent", new SideMenuItem(fetchResourceFile(), c.toString(), "very_basic_about.png"));
        c.putClientProperty("Actionable", Boolean.TRUE);
    
        tb.addCommandToSideMenu(c);
    
    }
    

私は自分の SideMenuItem を使用しています:

public class SideMenuItem extends Button {
    SideMenuItem() {
        this("");
    }

    SideMenuItem(String s) {
        super(s);
        setUIID("SideMenuItem");
        int h = Display.getInstance().convertToPixels(8, false);
        setPreferredH(h);
    }

    SideMenuItem(Resources res, String s, String icon) {
        super();
        setIcon(res.getImage(icon));
        setText(s);
        setUIID("SideMenuItem");
        int h = Display.getInstance().convertToPixels(8, false);
        setPreferredH(h);
    }
}
于 2016-01-31T04:13:42.003 に答える