第一次写博客,还有点小紧张,废话不多说,切入正题

android有3中菜单按钮  分别是 选项菜单,上下文菜单,弹出式菜单

 1.选项菜单(显示在右边)

   有两种实现方式:

1.在代码中直接添加  

 public  boolean  onCreate OptionsMenu(Menu menu){

      menu.add(0,100,10,"|Hello");

}

第一个参数 0表示在第几组

第二个参数 100 表示ID,你点击的时候需要通过这个ID来确定点击的是哪个

第三个参数 10表示 在这个菜单栏的上面还是下面,数值大的,在下面,小的在上面

第四个参数"Hello" 表示 你在菜单按钮中显示的内容

public  boolean  onOptionsItemSelected(MenuItem item){

   switch(item.getItemId){

           case R.id.xx:

               break;

          }

}

这里的R.id.xx就是通过上面方法的第二个参数

2.在XML中实现,在代码中调用

 在res目录下有个menu 

<item android:id="@+id/ll" android:title="Hello"
    android:orderInCategory="100" app:showAsAction="never"/>

 前面三个参数没什么好说的,跟上面的对应,这里说下最后一个参数 showAsAction 这里可以设置几个属性 说几个常用的  never 不显示  always 一直显示   ifRoom有空间才显示

调用的话 就在上面的第一个方法中直接  

getMenuInflater().inflate(R.menu.xxx,menu);

点击事件跟上面的第二个方法是一样的

2.上下文菜单  (显示在中间) 长按触发事件

也分两种,这里就不细说了 直接说主要方法,实现逻辑跟上面的差不多

主要有三个方法 

1.

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
   
        MenuInflater menuInflater=getMenuInflater();
        menuInflater.inflate(R.menu.xxx,menu);
    }



@Override
public boolean onContextItemSelected(MenuItem item) {
     switch (item.getItemId()){
        
     }
    return super.onContextItemSelected(item);
}
registerForContextMenu(xx);

前面两个方法跟选项菜单按钮差不了多少,在XML中少了showAsAction这个参数

值得主要的是最后一个方法,里面放的是一个View 就是你需要长按的哪个控件


3.弹出式菜单(位置不确定)

 弹出式菜单式停靠在一个View上的模式菜单,当你点击它的时候,如果View的下面有空间,那么弹出式菜单会显示在停靠对象的下面,否则将显示在上方

  注意:弹出式菜单在API  11或者以上的版本才支持,当然,现在就没有会低于11 的

 这里来看下具体的实现:

PopupMenu popupMenu=new PopupMenu(this,v);
MenuInflater menuInflater=popupMenu.getMenuInflater();
menuInflater.inflate(R.menu.xxx,popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(this);
popupMenu.show();

在XML文件中实现   直接就是 new PopupMenu()

第一个参数是  上下文

第二个参数是  你点击的那个事件源

弹出式菜单的点击事件是用 new出来的 popupMenu.setOnMenuItemClickListener

我这里是让Activity去实现

@Override
public boolean onMenuItemClick(MenuItem item) {
    switch (item.getItemId()){
       
    }
    return true;
}

是不是发现这3中菜单点击事件都差不多呢。。。其实就是这么简单  哈哈 !!


不知道说的对不对,我是新手,如有不对的地方 ,欢迎各位大神指导!!