Android四种菜单的使用

1. 为什么会有菜单 菜单一般是提供一些设置或是软件信息什么的,移动设备的屏幕不像PC那么大,不可能在屏幕搞一些按键来触发一些平时使用不会经常操作的事件,比如设置软件配置,查看软件信息什么的。这些功能可以添加到菜单选项中,既提供了该功能,又不会占用屏幕空间。(纯属扯淡有木有啊!!!因为我实在想不出要以什么开头写这篇总结)2. 菜单的不同创建方法2.1 动态创建 通过重写Activity中的onCreateOptionMenu方法来创建菜单,一般使用menu.add(“选项名”)为添加一个菜单选项,menu.getItem(int itemIndex)则是根据选项的索引获取该菜单选项,并对其进行操作,比如添加点击事件onMenuItemClickListener,用addSubMenu添加子菜单等。优点:创建方便,不需要建立资源文件。缺点:对于菜单条目过多或多级菜单操作不方便,按键多添加点击事件不方便。2.2 通过XML资源文件创建 可以通过menu文件夹下的menu.xml创建菜单的样式,然后再利用getMenuInflater().inflate(menuRes, menu)将创建的菜单样式inflate到程序中。大体主要分三步:第一步:建立XML资源文件:menu.xml文件一般的定义方式见如下:view sourceprint?01.<?xmlversionxmlversion="1.0"encoding="utf-8"?>02.03.05.06. 07.08.10.12. 13.14.第二步:在onCreateOptionMenu回调函数完成XML资源的infate,把菜单资源文件压入到程序中,不同菜单使用不同的回调函数,比如ContextMenu使用onCreateContextMenu:view sourceprint?1.publicbooleanonCreateOptionsMenu(Menu menu) {2.// Inflate the menu; this adds items to the action bar if it is present.3.getMenuInflater().inflate(R.menu.main, menu);4.returntrue;5.}第三步:如果我们需要给菜单添加点击事件,一般我们是通过重写onMenuItemSelected来设置的,不同菜单使用不同的点击回调函数,比如ContextMenu使用onContextItemSelected写法如下: view sourceprint?01.publicbooleanonMenuItemSelected(intfeatureId, MenuItem item) {02.switch(item.getItemId()) {03.caseItem.ID1:04.//do something05.break;06.caseItem.ID2:07.//do something08.break;09.//......10.}11.returnsuper.onMenuItemSelected(featureId, item);12.}3. 菜单的类型: 3.1 普通菜单: 一般的普通菜单,点击菜单键后显示出来的菜单,使用方法如第二点所述,只是设置item标签时把showAsAction值设为never即可。 3.2 显示在ActionBar的菜单: 这样的菜单可以直接从屏幕中看到,不需要点击菜单键才会显示,要做到这个只需要把Item的showAsAction从never改成ifRoom(如果有空间则显示)或always(总是显示)。例子如下;view sourceprint?01.02.07. 08.10.12. 13.14.15.20. 21.23.25. 26.27.效果图: [1.png] 3.3 浮动菜单(属于ContextMenu): 一般添加到ListView或GridView的菜单,长按菜单的某一项可以出发浮动菜单,定义这种菜单主要步骤如下:1、建立一个View,常用的为ListView或GridView;2、建立XML菜单资源文件;3、在Activity中的onCreateContextMenu函数中使用getMenuInflater().inflate()方法将XML菜单资源文件压入;4、在onContextItemSelected回调函数中添加菜单选项的点击事件。5、使用registerForContextMenu(View)为该View注册ContextMenu; 源码示例如下:view sourceprint?01.privateListView list;02.@Override03.protectedvoidonCreate(Bundle savedInstanceState) {04.super.onCreate(savedInstanceState);05.setContentView(R.layout.activity_main);06.String[] listItem = { "1", "2", "3", "4", "5"};07.ArrayAdapter aa = newArrayAdapter(this,08.android.R.layout.simple_list_item_1, listItem);09.list = (ListView) findViewById(R.id.list);10.list.setAdapter(aa);11.registerForContextMenu(list); 12.//为list注册上下文菜单,通过onCreateContextMenu把XML菜单资源文件压进来,13.//通过onContextItemSelectd为每个菜单选项添加长按点击事件。14.}15.@Override16.publicvoidonCreateContextMenu(ContextMenu menu, View v,17.ContextMenuInfo menuInfo) {18.super.onCreateContextMenu(menu, v, menuInfo);19.getMenuInflater().inflate(R.menu.float_menu, menu);20.}21.@Override22.publicbooleanonContextItemSelected(MenuItem item) {23.switch(item.getItemId()) { //判断长按点击了那个选项,为每个选项添加长按点击事件24.caseR.id.exit:25.showToast("exit");26.break;27.caseR.id.next:28.showToast("next");29.break;30.caseR.id.back:31.showToast("back");32.break;33.}34.returnsuper.onContextItemSelected(item);35.}36.privatevoidshowToast(String str) {37.Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();38.}效果图:[2.png] 3.4 ActionMode菜单(也属于ContextMenu): 显示在ActionBar的菜单,这种菜单是用于定义比较重要或常用的功能,放在ActionBar比较显眼。触发这种菜单跟浮动菜单一样,要长按,浮动菜单直接采用注册方法,而该菜单则需要我们去设置View的长按事件(setOnLongClickListener)。使用方法:1、建立XML菜单资源文件;2、建立一个内部类实现ActionMode.Callback接口,实现该接口的四个函数(onCreateActionMode,onPrepareActionMode,onActionItemClicked,onDestroyActionMode)3、在onCreateActionMode把XML文件压进来,而且返回true!4、在onActionItemClicked中添加菜单选项点击事件;5、建立一个View,以Button为例,添加OnLongClickListener事件,事件内容为startActionMode(实现Callback接口的类);源代码示例:(1)XML资源文件:view sourceprint?01.11.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值