zoukankan      html  css  js  c++  java
  • Android -- Options Menu,Context Menu,Popup Menu

    Options Menu                                                                          

    创建选项菜单的步骤:

    1、覆盖Activity 的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用

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

    3、当菜单项(MenuItem)被选择时,覆盖Activity 的onOptionsItemSelected(MenuItem item)来响应事件

    public class MainActivity extends Activity {
    
        // 定义一些变量,后面直接拿来用
        private static final int START_ITEM = Menu.FIRST;
        private static final int OVER_ITEM = Menu.FIRST + 1;
        private static final int SET_ITEM1 = Menu.FIRST + 2;
        private static final int SET_ITEM2 = Menu.FIRST + 3;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // 添加菜单项(组ID,菜单项ID,排序,标题)
            menu.add(0, START_ITEM, 100, "开始");
            menu.add(0, OVER_ITEM, 200, "结束");
            // 添加子菜单
            SubMenu sub1 = menu.addSubMenu("设置");
            sub1.add(1, SET_ITEM1, 300, "设置声音");
            sub1.add(1, SET_ITEM2, 400, "设置桌面");
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
    
            switch (item.getItemId()) {
            case START_ITEM:
                // 提示信息
                Toast.makeText(this, "开始", Toast.LENGTH_SHORT).show();
                break;
            case OVER_ITEM:
                // 提示信息
                Toast.makeText(this, "结束", Toast.LENGTH_SHORT).show();
                break;
            case SET_ITEM1:
                // 提示信息
                Toast.makeText(this, "声音设置", Toast.LENGTH_SHORT).show();
                break;
            case SET_ITEM2:
                // 提示信息
                Toast.makeText(this, "设置桌面", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
            }
            return super.onOptionsItemSelected(item);
        }
    
    }

    Context Menu                                                                        

    顾名思义,与上下文(环境)有关。思想类似于Windows中的右键单击弹出的快捷菜单。操作时需要长时间按住某个东东不放。

    创建上下文菜单的步骤:

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

    2、覆盖Activity 的onContextItemSelected(MenuItem iitem)来响应事件。

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

    public class MainActivity2 extends Activity {
    
        private Button btn1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main2);
            // 获取BUTTON对象
            btn1 = (Button) findViewById(R.id.button1);
            //在button上注册上下文菜单
            registerForContextMenu(btn1);
        }
    
        // 创建上下文菜单的事件方法
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
    
            getMenuInflater().inflate(R.menu.menu_main2, menu);
    
        }
    
        // 上下文菜单项触发事件
        @Override
        public boolean onContextItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case R.id.start:
                Toast.makeText(this, "开始。。。", Toast.LENGTH_SHORT).show();
                break;
            case R.id.over:
                Toast.makeText(this, "结束。。。", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
            }
            return super.onContextItemSelected(item);
        }
    
    }

    Popup Menu                                                                             

    弹出式菜单.

    弹出菜单是停靠在一个View上的一个模式菜单。如果View对象下方有空间,那么弹出菜单将显示在停靠对象的下方,否则会显示在上方。这是非常有用的。

    public class MainActivity3 extends Activity  implements OnMenuItemClickListener{
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main3);
        }
    
        public void showPopupMenu(View v){
            //创建弹出式菜单对象(最低版本11)
            PopupMenu popup = new PopupMenu(this,v);
            //获取菜单填充器
            MenuInflater inflater = popup.getMenuInflater();
            //填充菜单
            inflater.inflate(R.menu.menu_main3, popup.getMenu());
            //设置菜单项的单击事件
            popup.setOnMenuItemClickListener(this);
    
            popup.show();
        }
    
        //弹出式菜单的单击事件处理
        @Override
        public boolean onMenuItemClick(MenuItem item) {
    
            switch (item.getItemId()) {
            case R.id.copy:
                Toast.makeText(this, "复制。。。", Toast.LENGTH_LONG).show();
                break;
            case R.id.del:
                Toast.makeText(this, "删除。。。", Toast.LENGTH_LONG).show();
                break;
    
            default:
                break;
            }
            return false;
        }
    
    }

    我是天王盖地虎的分割线                                                               

    321

    源代码:http://pan.baidu.com/s/1dD1Qx01

    menu学习.zip

    转载请注明出处:http://www.cnblogs.com/yydcdut

  • 相关阅读:
    [C#菜鸟]C# Hook (三) Windows常用消息大全
    [C#菜鸟]C# Hook (二) 常用钩子的类型
    C# hook WndProc
    Win7、win8、win10下实现精准截获Explorer拷贝行为
    对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们
    VC中MessageBox与AfxMessageBox用法与区别
    C# 强命名程序集,防止dll被修改,混淆下发布
    easyhook报错The given 64-Bit library does not exist
    easyhook源码分析三——申请钩子
    Ext3日记文件系统为什么文件系统还会损坏?
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3828819.html
Copyright © 2011-2022 走看看