Android学习之菜单

android中包含多种菜单,本例带来的是选项菜单和上下文菜单。

1.选项菜单

在android中,开发者可以在xml文档中部署所要添加的菜单,在后台调用即可。

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

 2 

 3     <item

 4         android:id="@+id/action_add"

 5         android:title="添加"

 6         android:showAsAction="always|withText"/>

 7     <item

 8         android:id="@+id/action_save"

 9         android:title="保存"

10         android:showAsAction="ifRoom"/>

11     <item

12         android:id="@+id/action_discard"

13         android:title="删除"

14         android:showAsAction="ifRoom"/>

15     <item

16         android:id="@+id/action_delete"

17         android:title="删除"

18         android:showAsAction="ifRoom"/>

19     <item

20         android:id="@+id/action_undo"

21         android:title="撤销"

22         android:showAsAction="ifRoom"/>

23 </menu>
menu.xml

在xml中我们定义了几个常用的菜单,添加、删除、保存等。在xml中定义菜单式通过在<menu/>中定义的。<item/>即为菜单项。android最多可以有六个菜单,超出之后android系统会自动将超出的菜单放在更多的菜单项。

1     public boolean onCreateOptionsMenu(Menu menu) {

2         Inflate the menu; this adds items to the action bar if it is present.

3          MenuInflater inflater = getMenuInflater();

4          inflater.inflate(R.menu.main, menu);

5          mOptionsMenu = menu;

6         

7             return super.onCreateOptionsMenu(menu);

8     }
菜单显示

重写onCreateOptionsMenu方法,这里调用已经定义好的menu.xml,可以显示我们刚刚定义的菜单项。

在开发中,菜单也是与事件分不开的。通过onoptionsitemclick,来监听菜单的选中事件。

 1 public boolean onOptionsItemSelected(MenuItem menu)

 2     {

 3     

 4         switch(menu.getItemId())

 5         {

 6         case R.id.action_add:

 7             Toast.makeText(this, "您点击了添加", Toast.LENGTH_LONG).show();

 8             return true;

 9         case R.id.action_delete:

10             Toast.makeText(this, "您点击了删除", Toast.LENGTH_LONG).show();

11             return true;

12         case R.id.action_save:

13             Toast.makeText(this, "您点击了保存", Toast.LENGTH_LONG).show();

14             return true;

15         case R.id.action_undo:

16             Toast.makeText(this, "你点击了撤销", Toast.LENGTH_LONG).show();

17             return true;

18              default:

19                     return super.onOptionsItemSelected(menu);

20         }

21     

22             

23         

24     }
菜单事件

当然,开发人员也可以动态的添加菜单,不需要在xml中预先写好每一个菜单项。

mOptionsMenu.add(1, 1, 1, "添加");第一个参数:菜单项的分组id;第二个参数:菜单项的id;第三个参数:菜单显示顺序的id,android会根据id进行从左到右,从上到下的排序;第四个参数:菜单项的标题

2.子菜单和上下文菜单

在android中,子菜单和菜单是同一级的,可以通过submenu.add添加子菜单。添加一个带复选框的子菜单

 1     public boolean onCreateOptionsMenu(Menu menu) {

 2         // Inflate the menu; this adds items to the action bar if it is present.

 3         // MenuInflater inflater = getMenuInflater();

 4             //inflater.inflate(R.menu.main, menu);

 5            // mOptionsMenu = menu;

 6         SubMenu filesubmenu=menu.addSubMenu(1,1,2,"文件");

 7         MenuItem newMenu=filesubmenu.add(1,2,2,"新建");

 8         newMenu.setCheckable(true);

 9         MenuItem openMenu=filesubmenu.add(2,3,3,"打开");

10         filesubmenu.setGroupCheckable(2, true, true);

11             return super.onCreateOptionsMenu(menu);

12     }
子菜单

上下文菜单可以和任意的view关联,而且它必须关联一个view,例如button、textview等。

 1 public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInof)

 2     

 3     {

 4         super.onCreateContextMenu(menu, view, menuInof);

 5         menu.add("上下文菜单");

 6         menu.add(0,ITEM1,Menu.NONE,"放大").setCheckable(true).setChecked(true);

 7         menu.add(20,ITEM2,Menu.NONE,"缩小");

 8         menu.add(20,ITEM3,Menu.NONE,"平移");

 9         menu.setGroupCheckable(20, true, true);

10         SubMenu sub=menu.addSubMenu(0,4,Menu.NONE,"子菜单");

11         sub.add("子菜单1");

12         sub.add("子菜单2");

13     }
上下文菜单

上下文菜单中可以添加子菜单的。上下文菜单在添加中,需要注册。

Button button9=(Button)findViewById(R.id.button9);
registerForContextMenu(button9);

这里将定义的上下文菜单注册到button9中。

如果想实现对上下文菜单选择时间的监听,oncontextitemselected方法实现。

 1      public boolean onContextItemSelected(MenuItem item){       

 2             switch(item.getItemId()){

 3             case ITEM1:

 4                 //在这里添加处理代码

 5                 Toast.makeText(this, "点击了放大", 5000).show();

 6                 return true;

 7             case ITEM2:

 8                 //在这里添加处理代码

 9                 Toast.makeText(this, "点击了缩小", 5000).show();

10                 break;    

11             case ITEM3:

12                 //在这里添加处理代码

13                 

14                 break;

15             }

16             return true;

17         }
上下文菜单事件

 

你可能感兴趣的:(Android学习)