• <Android>菜单资源的使用


    典型菜单资源结构:<menu>根元素且没有属性,在<menu>根元素里面会嵌套<item>和<group>子元素,<item>里面可以嵌套<menu>形成子菜单。

    <group>表示一个菜单组,相同的菜单组可以一起设置其属性,属性说明如下

    id:唯一标示该菜单组的引用id

    meunCategory:对菜单进行分类,定义菜单的优先级,有效值为container,system,secondary和alternative。

    orderInCategory:一个分类排序整数

    checkableBehavior:选择行为,单选多选还是其它,有效值为none,all,single

    visable:是否可见,true或false

    enabled:是否可见,true或false

    <item>表示菜单项,包含在<menu>或者<group>中的有效属性,说明如下

    id:唯一标示菜单的ID引用

    orderInCategory:分类排序

    menuCategory:菜单分类

    title:菜单标题字符串

    titleCondensed:浓缩标题,适合标题太长的时候使用

    icon:菜单的图标

    alphabeticShortcut:字符快捷键

    numericShortcut:数字快捷键

    checkable:是否可选

    checked:是否已被选中

    visible:是否可见

    enabled:是否可用

    1.菜单xml文件示例file_menu.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item
    
           android:title="File"
    
           android:icon="@drawable/file">
    
            <menu>
    
                <group
    
                   android:id="@+id/noncheckable_group"
    
                   android:checkableBehavior="none">
    
                  
    
                    <item
    
                    android:id="@+id/newFile"
    
                    android:title="New"
    
                    android:alphabeticShortcut="n"/>
    
                   
    
                    <item
    
                    android:id="@+id/openFile"
    
                         android:title="Open"
    
                         android:alphabeticShortcut="o"/>
    
                        
    
                    <item
    
                    android:id="@+id/saveFile"
    
                    android:title="Save"
    
                    android:alphabeticShortcut="s"/>
    
                </group>
    
            </menu>
    
        </item>
    
        <item android:title="Edit" android:icon="@drawable/edit">
    
            <menu>
    
                <group android:id="@+id/edit_group"
    
                        android:checkableBehavior="single">
    
                       
    
                    <item android:id="@+id/cut"
    
                          android:title="Cut" />
    
                         
    
                    <item android:id="@+id/copy"
    
                          android:title="Copy"/>
    
                         
    
                    <item android:id="@+id/past"
    
                          android:title="Past"/>
    
                </group>
    
            </menu>
    
        </item>
    
        <item android:title="Help" android:icon="@drawable/help">
    
            <menu>
    
                <group android:id="@+id/help_group">
    
                    <item android:id="@+id/about"
    
                            android:title="About" />
    
                    <item android:id="@+id/exit"
    
                            android:title="Exit" />
    
                </group>
    
            </menu>
    
        </item>
    
       
    
    </menu>

    2.java代码中加载菜单

    //private MenuInflater mi;
    
    //mi = new MenuInflater(this);
    
    /*
    
     * 创建菜单
    
     */
    
    public boolean onCreateOptionsMenu(Menu menu) {
    
        mi.inflate(R.menu.file_menu, menu);
    
        return true;
    
    }
    
    //菜单响应
    
    @Override
    
    public boolean onOptionsItemSelected(MenuItem item) {
    
       switch (item.getItemId()) {
    
       case R.id.about:
    
              aboutAlert("本实例演示的是如何使用XML菜单资源来定义菜单!");
    
              break;
    
       case R.id.exit:
    
              exitAlert("真的要退出吗?");
    
              break;
    
       }
    
       return true;
    
    }
    
    // 显示对话框
    
    private void exitAlert(String msg){
    
       AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
       builder.setMessage(msg)
    
              .setCancelable(false)
    
              .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
                  public void onClick(DialogInterface dialog, int id) {
    
                         finish();
    
                  }
    
              }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
                  public void onClick(DialogInterface dialog, int id) {
    
                         return;
    
                  }
    
              });
    
       AlertDialog alert = builder.create();
    
       alert.show();
    
    }
    
    // 显示对话框
    
    private void aboutAlert(String msg){
    
       AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
       builder.setMessage(msg)
    
              .setCancelable(false)
    
              .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
                  public void onClick(DialogInterface dialog, int id) {
    
                  }
    
              });
    
       AlertDialog alert = builder.create();
    
       alert.show();
    
    }

    直接在java代码中使用

    选项菜单

    1.覆盖Activity的onCreateOptionsMenu(Menu menu)方法,第一次打开菜单时该方法被自动跳用

    2.调用Menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法设置菜单项图标

    3.当菜单项被选择时,覆盖Activity的onOptionsItemSelected()方法来响应事件

    public class MainActivity extends Activity {
    
       private static final int ITEM1 = Menu.FIRST;
    
       private static final int ITEM2 = Menu.FIRST+1;
    
        public void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.main);
    
        }
    
       /**
    
        * 覆盖该方法添加菜单项
    
        */
    
       public boolean onCreateOptionsMenu(Menu menu) {
    
              menu.add(0, ITEM1, 0, "开始");
    
              menu.add(0, ITEM2, 0, "退出");
    
              return true;
    
       }
    
        /**
    
         * 覆盖该方法,响应菜单选项被单击事件
    
         */
    
        public boolean onOptionsItemSelected(MenuItem item) {
    
           switch (item.getItemId()) {
    
              case ITEM1:
    
                     setTitle("开始游戏!");
    
                     break;
    
              case ITEM2:
    
                     setTitle("退出!");
    
                     break;
    
              }
    
           return true;
    
        }
    
    }

    上下文菜单

    1.覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项(MenuItem).

    2.覆盖onContextItemSelected()方法,响应菜单单击事件。

    3.调用registerForContextMenu()方法,为视图注册上下文菜单。

    public void onCreate(Bundle savedInstanceState) {
    
       super.onCreate(savedInstanceState);
    
       setContentView(R.layout.main);
    
       myTV = (TextView)findViewById(R.id.TextView01);
    
       registerForContextMenu(myTV);
    
    }
    
    @Override
    
    public void onCreateContextMenu(ContextMenu menu, View v,
    
              ContextMenuInfo menuInfo) {
    
       menu.add(0, ITME1, 0, "红色背景");
    
       menu.add(0, ITME2, 0, "绿色背景");
    
       menu.add(0, ITME3, 0, "白色背景");
    
    }
    
    @Override
    
    public boolean onContextItemSelected(MenuItem item) {
    
       switch (item.getItemId()) {
    
       case ITME1:
    
              myTV.setBackgroundColor(Color.RED);
    
              break;
    
       case ITME2:
    
              myTV.setBackgroundColor(Color.GREEN);
    
              break;
    
       case ITME3:
    
              myTV.setBackgroundColor(Color.WHITE);
    
              break;
    
       }
    
       return true;
    
    }

    子菜单

    1.覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法添加子菜单项(Sub Menu)

    2.调用SubMenu的add()方法,添加子菜单(Sub Menu)

    3.覆盖onOptionsItemSelected()方法,响应菜单单击事件

    public class MainActivity extends Activity {
    
       private static final int ITEM1 = Menu.FIRST;
    
       private static final int ITEM2 = Menu.FIRST+1;
    
      
    
        public void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.main);
    
        }
    
       /**
    
        * 覆盖该方法添加子菜单项
    
        */
    
       public boolean onCreateOptionsMenu(Menu menu) {
    
              SubMenu file = menu.addSubMenu("文件");
    
              SubMenu edit = menu.addSubMenu("編輯");
    
              file.add(0, ITEM1, 0, "新建");
    
              file.add(0, ITEM2, 0, "打开");
    
              return true;
    
       }
    
        /**
    
         * 覆盖该方法,响应菜单选项被单击事件
    
         */
    
        public boolean onOptionsItemSelected(MenuItem item) {
    
           switch (item.getItemId()) {
    
              case ITEM1:
    
                     setTitle("新建文件!");
    
                     break;
    
              case ITEM2:
    
                     setTitle("打开文件!");
    
                     break;
    
              }
    
           return true;
    
        }
  • 相关阅读:
    重构之路第一篇——重新组织函数的几种方法
    Maven设置http代理
    maven本地仓库路径和修改
    Maven安装目录分析
    使用Python解析Loadrunner的post的中文数据
    Python3 批量创建文件夹
    tomcat设置上传文件大小
    Jenkins启动
    Sublime Text 3 编译Python3
    常用SQL
  • 原文地址:https://www.cnblogs.com/lshs/p/4397212.html
Copyright © 2020-2023  润新知