zoukankan      html  css  js  c++  java
  • Android菜单—Menu

    菜单是常用的用户界面元素,在Android系统里提供了3种类型的菜单。

    (1)选项菜单(options menu):按设备上Menu 键显示的菜单。

    (2)上下文菜单(context menu):长按特定界面view显示,跟具体的 view 绑定在一起,类似PC上鼠标右键菜单。

    (3)子菜单(sub menu):以上两种菜单都可以加入子菜单,但子菜单不能再嵌套子菜单。

    下面我们通过一个例子来演示3种菜单的基本用法。

    菜单的XML资源文件放在res/menu目录下。

    optionmenu.xml

    1.   <?xml version="1.0" encoding="utf-8"?>

    2.   <menu xmlns:android="http://schemas.android.com/apk/res/android">

    3.   <item android:id="@+id/optionitem1"

    4.   android:icon="@drawable/icon"

    5.   android:title="选项1" />

    6.   <item android:id="@+id/optionitem2"

    7.   android:icon="@drawable/ic_launcher"

    8.   android:title="选项2" />

    9.   <item android:id="@+id/optionitem3"

    10.  android:icon="@drawable/icon"

    11.  android:title="子菜单" >

    12.  <menu>

    13.  <item android:id="@+id/subitem1"

    14.  android:title="子菜单项1" />

    15.  <item android:id="@+id/subitem2"

    16.  android:title="@string/子菜单项2" />

    17.  </menu>

    18.  </item>

    19.  </menu>

    在这个菜单资源文件里,定义了3个菜单项,id分别为optionitem1、optionitem2和optionitem3。每个菜单项item有自己的id、title和icon。

    第9~18行的optionitem3菜单项里除了定义了id、title和icon外,还增加了第12~17行所示的子菜单结构。子菜单的item只有id和title,不能设置icon。

    上下文菜单资源文件。

    contextmenu.xml

    1.   <?xml version="1.0" encoding="utf-8"?>

    2.   <menu xmlns:android="http://schemas.android.com/apk/res/android">

    3.   <item

    4.   android:id="@+id/contextitem1"

    5.   android:title="上下文菜单子项1">

    6.   </item>

    7.   <item

    8.   android:id="@+id/contextitem2"

    9.   android:title="上下文菜单子项2">

    10.  </item>

    11.  <item

    12.  android:id="@+id/contextitem3"

    13.  android:title="上下文菜单子项3">

    14.  </item>

    15.  </menu>

    上下文菜单的格式和子菜单格式类似,item项没有icon属性。

    菜单例子的Java源代码如下。

    Mymenu.java

    1.   @Override

    2.   public void onCreate(Bundle savedInstanceState) { 

    3.   super.onCreate(savedInstanceState); 

    4.   setContentView(R.layout.main); 

    5.   GridView gridview;

    6.   String[] titles={"赵1","钱2","张三","李四","王五"};   

    7.   int buf=R.drawable.sample;

    8.   int[] resIds={buf,buf,buf,buf,buf};

    9.   gridview=(GridView)this.findViewById(R.id.gridview);

    10.  gridview.setAdapter(new MyAdapter(titles,resIds));

    11.  registerForContextMenu(gridview) ;

    12.  gridview.setOnItemClickListener(new AdapterView.OnItemClickListener(){

    13.  ......});}

    14.  @Override

    15.  public void onCreateContextMenu(ContextMenu menu,View

        v,ContextMenu.ContextMenuInfo menuInfo){

    16.  super.onCreateContextMenu(menu,v,menuInfo);

    17.  getMenuInflater().inflate(R.menu.contextmenu,menu);

    18.  }

    19.  @Override 

    20.  public boolean onContextItemSelected (MenuItem item) { 

    21.  super.onContextItemSelected(item); 

    22.  switch (item.getItemId()) { 

    23.  case R.id.contextitem1: 

    24.  Toast.makeText(this, "上下文菜单子项1", Toast.LENGTH_SHORT).show(); 

    25.  break; 

    26.  case R.id.contextitem2: 

    27.  Toast.makeText(this, "上下文菜单子项2", Toast.LENGTH_SHORT).show(); 

    28.  break; 

    29.  case R.id.contextitem3: 

    30.  Toast.makeText(this, "上下文菜单子项3", Toast.LENGTH_SHORT).show(); 

    31.  break; 

    32.  default: 

    33.  break; 

    34.  } 

    35.  return  super.onOptionsItemSelected(item);

    36.  }

    37.  @Override 

    38.  public boolean onCreateOptionsMenu(Menu menu) { 

    39.  super.onCreateOptionsMenu(menu); 

    40.  getMenuInflater().inflate(R.menu.optionmenu, menu); 

    41.  return true;

    42.  }

    43.  @Override

    44.  public boolean onOptionsItemSelected(MenuItem item)

    45.  {

    46.  switch (item.getItemId())

    47.  {

    48.  case R.id.optionitem1:

    49.  Toast.makeText(this, "单击了选项1", Toast.LENGTH_SHORT).show(); 

    50.  return true;

    51.  case R.id.optionitem2:

    52.  Toast.makeText(this, "单击了选项2", Toast.LENGTH_SHORT).show(); 

    53.  return true;

    54.  case R.id.optionitem3:

    55.  Toast.makeText(this, "单击了选项3", Toast.LENGTH_SHORT).show(); 

    56.  return true;

    57.  case R.id.subitem1:

    58.  Toast.makeText(this, "单击子菜单选项1", Toast.LENGTH_SHORT).show(); 

    59.  return true;

    60.  case R.id.subitem2:

    61.  Toast.makeText(this, "单击子菜单选项2", Toast.LENGTH_SHORT).show(); 

    62.  return true;

    63.  default:

    64.  return super.onOptionsItemSelected(item);

    65.  }}

    66.  public class MyAdapter extends BaseAdapter {

    67.  ......}}

    第11行registerForContextMenu(gridview),我们为gridview注册了一个上下文菜单,当gridview里的itemview接收到长按事件时就会弹出一个上下文菜单。

    第14~18行我们重写了onCreateContextMenu这个创建上下文菜单的回调方法。上下文菜单每次触发显示时都会调用这个方法。

    第17行我们使用getMenuInflater().inflate方法装载菜单资源XML文件contextmenu到menu对象里,这个menu对象是由onCreateContextMenu回调函数传入的上下文菜单对象。

    第19~36行的onContextItemSelected方法是当用户选择了上下文菜单中的选项时系统回调的方法,系统会传入用户选择的MenuItem对象。通过item.getItemId()我们知道用户选的菜单项的id号。在这里我们用toast显示用户的选择信息。

    第37~42行onCreateOptionsMenu是创建选项菜单的回调方法,系统在第一次创建选项菜单时调用该方法。我们重写了该方法将菜单资源optionmenu加载到选项菜单。

    第43~65行是选项菜单的item响应回调函数,同样我们通过item.getItemId()获取选项id号。

    运行效果图如图10-14、图10-15、图10-16和图10-17所示。

     

            

    ▲图10-14  选项菜单图示                        ▲图10-15  单击选项2后的图示

     

          

    ▲图10-16  子菜单图示                                ▲图10-17  上下文菜单图示

  • 相关阅读:
    烂泥:学习ubuntu之快速搭建LNMP环境
    烂泥:学习ubuntu远程桌面(二):远程桌面会话管理
    烂泥:学习ubuntu远程桌面(一):配置远程桌面
    烂泥:学习ssh之ssh密钥随身携带
    烂泥:学习ssh之ssh无密码登陆
    JS 获取浏览器窗口大小
    connect() failed (111: Connection refused) while connecting to upstream的解决
    css加载没效果,查看网络显示类型为 text/plain 的解决方法
    empty和isset的区别
    SQLite3命令操作大全
  • 原文地址:https://www.cnblogs.com/zhoujn/p/4311635.html
Copyright © 2011-2022 走看看