【问题标题】:Create Sub Menu in Android through Code通过代码在 Android 中创建子菜单
【发布时间】:2011-07-01 04:59:01
【问题描述】:

我在 Android 中使用 XML 文件 创建了一个 子菜单。但我想使用编程代码来创建它。

可以创建吗?

我怎样才能实现它?

谢谢。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    此代码有效

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.SubMenu;
    import android.widget.Toast;
    
    /**
     * Class which shows how to work with Submenus
     *
     * @author FaYna Soft Labs
     */
    public class Main extends Activity {
    
    private static final int FILE = 0;
    private static final int EDIT = 1;
    
    private static final int NEW_MENU_ITEM = Menu.FIRST;
    private static final int SAVE_MENU_ITEM = NEW_MENU_ITEM + 1;
    
    private static final int UNDO_MENU_ITEM = SAVE_MENU_ITEM + 1;
    private static final int REDO_MENU_ITEM = UNDO_MENU_ITEM + 1;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        SubMenu fileMenu = menu.addSubMenu("File");
        SubMenu editMenu = menu.addSubMenu("Edit");
        fileMenu.add(FILE, NEW_MENU_ITEM, 0, "new");
        fileMenu.add(FILE, SAVE_MENU_ITEM, 1, "save");
        editMenu.add(EDIT, UNDO_MENU_ITEM, 0, "undo");
        editMenu.add(EDIT, REDO_MENU_ITEM, 1, "redo");
        return super.onCreateOptionsMenu(menu);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case NEW_MENU_ITEM:
            showMsg("New");
            break;
        case SAVE_MENU_ITEM:
            showMsg("Save");
            break;
        case UNDO_MENU_ITEM:
            showMsg("Undo");
            break;
        case REDO_MENU_ITEM:
            showMsg("Redo");
            break;
        }
        return super.onOptionsItemSelected(item);
    }
    
    private void showMsg(String message) {
        Toast msg = Toast.makeText(Main.this, message, Toast.LENGTH_LONG);
        msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2,
                msg.getYOffset() / 2);
        msg.show();
    }
    }
    

    【讨论】:

    • 如果正在显示子菜单,在方向更改后,它将被销毁并且您的菜单将消失。有没有持久化 SubMenu 的好方法?
    • 嗨,Bernie,你找到了持久化 SubMenu 的方法吗?
    【解决方案2】:

    【讨论】:

    • 感谢您的宝贵重播。
    【解决方案3】:

    子菜单是对菜单项进行分组的另一种方式。

    我将展示如何创建、添加项目和处理项目选择。

    创建子菜单并添加项目:

        @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        SubMenu fileMenu = menu.addSubMenu("File");
                fileMenu.add(FILE, NEW_MENU_ITEM, 0, "new");
        ...
    

    处理子菜单项选择

        @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case NEW_MENU_ITEM:
            doSomething();
            break;
         ...
    

    这些简单的代码 sn-ps 展示了如何创建和使用子菜单。 我还将发布整个示例。复制到您的 IDE 并运行它:

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2014-09-01
      • 2020-06-06
      相关资源
      最近更新 更多