Android 基础学习笔记之- Menu的用法

17 篇文章 1 订阅
2 篇文章 0 订阅

今天在微信公众号看了一篇推送文章,是一个炫酷的menu(菜单)实现方法,自己想了想,好像之前没怎么用过menu,于是今天花点时间,把menu基本用法和各种效果看看书,实现一下,算是基础学习的开始吧。

查了下资料,Android常用的菜单类型主要有:

      1).OptionMenu - 选项菜单

      2).SubMenu      - 子菜单

      3).ContextMenu- 上下文菜单

      4).PopupMenu  - 弹出菜单

下面按顺序用代码的形式依次实现其功能效果

1.OptionMenu - 选项菜单

OptionMenu 作为最常规的菜单,也是出现的最早的菜单,它一般最多只能在界面显示6个菜单选项,如果超过六个,则第6个菜单会以more menu选项的形式展示

实现方法:

1).在java文件中以代码形式实现

2).在menu的xml文件中实现

两种方法都需要熟悉,但我更倾向于第一种,所以这里给出java文件中以代码形式实现OptionMenu 

首先需要定义菜单项:

//定义菜单项
private static final int item1=Menu.FIRST;
private static final int item2=Menu.FIRST+1;
private static final int item3=Menu.FIRST+2;
private static final int item4=Menu.FIRST+3;
private static final int item5=Menu.FIRST+4;
然后在antivity中重写OncreateoptionsMenu(Menu menu)方法,将menu对象调用add()方法来把菜单项添加进来

add()方法主要有四个:

    add(charSequence title);

    add(int groupId ,int itemId,int order,charsequence title);第一个参数表示组号,便于后面管理菜单选项;第二个是菜单项的编号;第三个是菜单项显示顺序,默认为                                                                                                                                       0,为菜单项添加的顺序;第四个是菜单的标题

    add(int groupId ,int itemId,int order,int titleRes);前三个参数同上,第四个表示标题的资源id

    add(int titleRes);

最常用的是第二个方法:

public boolean onCreateOptionsMenu(Menu menu) {

    menu.add(0,item1,1,"音乐");
    menu.add(0,item2,2,"视频");
    menu.add(0,item3,3,"小说");
    menu.add(0,item4,4,"游戏");
    //添加子菜单
    SubMenu subMenu=menu.addSubMenu(1,item5,5,"新闻");
    subMenu.add(2,item6,1,"娱乐新闻");
    subMenu.add(2,item7,2,"军事新闻");

    return true;
}
submenu的添加方法与其如出一辙,不详细说明了。既然菜单项做好了,那么还需要什么呢?不错,是它们的响应事件。

通过重写方法onOptionItemSelected()实现响应的监听:

public boolean onOptionsItemSelected(MenuItem item) {//重写菜单响应方法
    switch (item.getItemId()){
        case item1:
            Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show();
            break;
        case item2:
            Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show();
            break;
        case item3:
            Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show();
            break;
        case item4:
            Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show();
            break;
        case item5:
            Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show();
            break;
        case item6:
            Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show();
            break;
        case item7:
            Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show();
            break;
    }
    return true;
}
至于运行效果就算了,我手机是魅族,没有菜单按键了= =

2.SubMenu子菜单上面也已经一并介绍用法了,这里就跳过了


3.ContextMenu- 上下文菜单

 ContextMenu- 上下文菜单属于一种很常用的菜单类型,它与OptionMenu的不同之处在于:optionMenu的拥有者是Activity,而contextMenu的拥有者是view,所以,我们可以通过长按响应view来调出contextMenu。

首先写一个控件来调用并注册上下文菜单:

private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView= (TextView) findViewById(R.id.test);
    registerForContextMenu(textView);
}

然后添加上下文菜单项:

//添加上下文菜单项
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    menu.add(0,1,1,"新建");
    menu.add(0,2,2,"删除");
    menu.add(0,3,3,"修改");
    menu.add(0,4,4,"查找");
    super.onCreateContextMenu(menu, v, menuInfo);
}
最后加上菜单项的监听:

//菜单项响应

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo adapterContextMenuInfo= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()){
        case 1:
            Toast.makeText(this,item.getItemId(),Toast.LENGTH_SHORT).show();
            break;
        case 2:
            Toast.makeText(this,item.getItemId(),Toast.LENGTH_SHORT).show();
            break;
        case 3:
            Toast.makeText(this,item.getItemId(),Toast.LENGTH_SHORT).show();
            break;
        case 4:
            Toast.makeText(this,item.getItemId(),Toast.LENGTH_SHORT).show();
            break;
    }
    return true;
}
附上效果图:


3..PopupMenu  - 弹出菜单

PopupMenu也是响应view操作的,在点击该view后会弹出菜单,而不像前者一样需要长按。

下面直接上代码了,关于popupmenu用法可以和popupwindow比较起来使用,推荐一偏它们的博客:http://blog.csdn.net/a379992210/article/details/48423923

textView.setOnClickListener(this);//为textview设置监听器
//点击事件的监听
public void onClick(View v) {
    switch (v.getId()){
        case R.id.test:
            PopupMenu popupMenu=new PopupMenu(this,textView);
            MenuInflater menuInflater=popupMenu.getMenuInflater();
            menuInflater.inflate(R.menu.main_menu,popupMenu.getMenu());//获取menu的文件
            popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()){
                        case R.id.item1:
                            //do things
                            break;
                        case R.id.item2:
                            //do things
                            break;
                    }
                    return false;
                }
            });
            popupMenu.show();
            break;
    }

运行后,点击textview,效果如下:


关于menu的基本知识学习笔记就记录到这了,后面会根据情况不定时拓展相关用法和实现。

小结:

1).menu的两种实现方式:代码实现和xml实现

2).熟悉add()方法中参数的含义和作用

3).上下文菜单---contextMenu用法比较灵活,会与listview联系起来使用,注意它们的用法和灵活性

4).popupMenu与popipWindow的使用区别与效果区别

5).多加注意代码的规范性和方法的封装性

补充:本文仅作记录和参考,如有问题或者好的改进建议欢迎大家提出来,谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值