zoukankan      html  css  js  c++  java
  • Android三种菜单的使用方式

    一、选项菜单(OptionMenu)

    • res目录下新建menu目录,用于放置菜单布局文件(右键res->new->Android Resource Directory->menu)
    • menu下创建菜单布局文件,根标签为menu,menu下面有多个group,group下面有多个item.
      简单示例如下:
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@+id/oi_1"
            android:title="编程语言"
            android:checkable="true"></item>
        <item
            android:id="@+id/oi_2"
            android:checkable="true"
            android:title="算法"></item>
    </menu>
    
    • 重写ActivityonCreateOptionsMenu方法
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //根据菜单布局文件填充菜单项
        getMenuInflater().inflate(R.menu.menu_options, menu);
        return true;
    }
    
    • 监听菜单项
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.oi_1:
                doSomething....
                return true;
            case R.id.oi_2:
                doSomething....
                return true;
            case R.id.oi_3:
                doSomething....
                return true;
            case R.id.oi_4:
                doSomething....
                return true;
            default:
                doSomething....
                return super.onOptionsItemSelected(item);
        }
    }
    

    二、上下文菜单

    • 创建菜单布局文件
    • 为指定view(可以是Button,TextView等等)注册上下文菜单
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_context_menu);
        //这是一个按钮
        Button colorSelector = findViewById(R.id.btn_color_selector);
        //为button注册上下文菜单
        registerForContextMenu(colorSelector);
    }
    
    • 重写ActivityonCreateOptionsMenu方法
    @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            //为菜单设置title
            menu.setHeaderTitle("please select your favorite color:");
            //填充菜单项
            getMenuInflater().inflate(R.menu.menu_context, menu);
        }
    
    • 监听菜单项
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        switch(item.getItemId()){
            case R.id.ci_red:
                colorSelector.setBackgroundColor(Color.parseColor("red"));
                return true;
            case R.id.ci_purple:
                colorSelector.setBackgroundColor(Color.parseColor("purple"));
                return true;
            case R.id.ci_white:
                colorSelector.setBackgroundColor(Color.parseColor("white"));
                return true;
        }
        return super.onContextItemSelected(item);
    }
    
    • 取消注册
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消注册,防止内存溢出
        unregisterForContextMenu(colorSelector);
    }
    

    三、弹出式菜单

    • 创建菜单布局文件
    • 监听指定view点击事件,同时构建弹出菜单对象
    //这是对应button的点击监听事件
    public void showPopupMenu(View view) {
        final PopupMenu menu = new PopupMenu(PopupMenuActivity.this, view);
        getMenuInflater().inflate(R.menu.menu_popup, menu.getMenu());
        menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.pi_hide:
                        //菜单隐藏
                        menu.dismiss();
                        return true;
                    default:
                        Toast.makeText(PopupMenuActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
                        return true;
                }
            }
        });
        menu.show();
    }
    
  • 相关阅读:
    C#.ToString()格式大全
    C# 中的正则验证及用法
    解除SVN的控制
    SVN检出忽略文件夹文件
    Mac下查看及生成SSH Key
    Xcode-报错问题总结大全
    CentOS6.5上kafka 安装过程-多机版本
    神经网络绘图网址
    CentOs 中没有eth0文件
    Spring 入门
  • 原文地址:https://www.cnblogs.com/wotoufahaiduo/p/11629071.html
Copyright © 2011-2022 走看看