Android_Menu常用菜单详解
来源:互联网 发布:netstat监听端口 编辑:程序博客网 时间:2024/05/19 18:17
1.menu概述
(1).Options menu
开发应用版本在 Android 2.3.x (API level 10) 及以下版本顺利运行,如果用户点击了menu按钮则该选项菜单将显示在手机品目的底端,如果菜单条目超过6个,将多余的可能溢出的item条目封装在more条目中。
(2).Action bar
开发应用在Android 3.0 (API level 11)及以上版本,item主要包含一些重要的动作,在<item>标签中定义了android:showAsAction="ifRoom",将可能出现在Action Bar位置右边。
(3).Context menu
开发应用版本在 Android 2.3.x (API level 10) 及以下版本顺利运行,上下文菜单常用于ListView,GridView或者view集合中,当用户长按一个view对象时,该menu显示,类似于对话框。
(4).Contextual action mode
开发应用在Android 3.0 (API level 11)及以上版本,该模式实现了ActionMode,展现在屏幕的顶端,类似ActionBar
(5).Popup menu
点击按钮弹出一个菜单
2.Menu xml文件定义
android提供了一种标准的menu xml文件定义格式化,而不是在应用代码中定义。通过menu加载器将res/menu/下的 menu xml资源文件加载进activity或fragment.下面列举的是menu xml文件中,主要的元素标签
(1).<menu>
该menu标签为menu xml文件的根节点元素标签,是menu items的容器,里面可容纳一个或者多个<item>和<group>标签
(2).<item>
代表了菜单中一个具体的菜单条目,该条目可对应一个具体的操作信息,或者展开内部包含的子菜单信息(在item标签内部定义menu标签)
(3).<group>
可选标签,其左右是方便操作该group中的所有子item标签属性,比如group下的所有item隐藏,不可操作或者不可选中
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 将group标签中的item封装为一组,可方便操作 --> <group android:id="@+id/group"> <item android:id="@+id/dell" android:showAsAction="ifRoom|withText" android:title="Delete"/> <item android:id="@+id/share" android:showAsAction="ifRoom|withText" android:title="Share"/> </group> <!-- more中包含子菜单 --> <item android:id="@+id/more" android:showAsAction="ifRoom|withText" android:title="more..."> <menu> <item android:id="@+id/del" android:icon="@android:drawable/ic_menu_delete" android:showAsAction="ifRoom|withText" android:title="Delete"/> <item android:id="@+id/share" android:icon="@android:drawable/ic_menu_share" android:showAsAction="ifRoom|withText" android:title="Share"/> </menu> </item></menu>
3.Options menu与Action bar
在开发选项按钮时,在高版本开发的ActionBar,在低版本上也可以以不同方式展现,后面博文将重点讲解ActionBar
class OptionMenuTest extends Activity{//1.实现onCreateOptionsMenu方法public boolean onCreateOptionsMenu(Menu menu) {//用menu加载器将menu xml文件加载进来this.getMenuInflater().inflate(R.menu.main, menu);return true;}//2.为该选项菜单增加选择事件@Overridepublic boolean onOptionsItemSelected(MenuItem item) {//得到子菜单idswitch (item.getItemId()) {case R.id.bt:Toast.makeText(this, "设置", 0).show();return true;default:break;}return false;}}
4.Contextual Menus
上下文菜单常见作用于ListView, GridView对象
public class ContextMenuTest extends Activity {private List<String> list;private ListView listView;private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/* * 1.在Activity的onCreate方法区,注册上下文菜单,需要指定view对象 该步对知道 * 的view对象(listView)设定了OnCreateContextMenuListener监听器 */registerForContextMenu(listView);}/* * 2.在onCreateContextMenu方法中,将menu布局通过MenuInlater加载进来 */public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {MenuInflater inflater = getMenuInflater(); // 得到menu加载器inflater.inflate(R.menu.w, menu); // 将指定的布局加载}/* * 3.捕获Context菜单的事件,可以执行相应的操作 */public boolean onContextItemSelected(MenuItem item) {// 通过菜单信息,可以得到用户长按的listView等item条目信息AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();switch (item.getItemId()) {case R.id.title1:Toast.makeText(this, "Delete:" + item.toString(), 1).show();return true;case R.id.title2:// 特殊:下面这个例子中的listView每个条目只有一条,可以简单当做TextView文本((TextView) info.targetView).setText(new Date().toLocaleString());// 通过 info.id 可以得到用户点击listView的idlist.set((int) info.id, new Date().toLocaleString());return true;default:return super.onContextItemSelected(item);}}}
5.Popup Menu
弹出菜单
public class PopupMenuTest extends Activity {private List<String> list;private ListView listView;private Button button;private boolean flag;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.bt);// 1.创建popupMenu对象final PopupMenu popupMenu = new PopupMenu(this, button); // 第二个参数anchor,指该popupmenu围绕anchorMenuInflater inflater = popupMenu.getMenuInflater(); // 得到MenuInflater加载器inflater.inflate(R.menu.w, popupMenu.getMenu()); // 加载menu对象// 2.设定点击事件,当用户点击该按钮后,显示该menu对象button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {popupMenu.show(); // 显示popupmenu对象}});// 3.设定menu的点击事件(可以执行相应的操作)popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {// 对于一些item// 在<group>标签容器中,可以指定设点该group标签下的item是否可见,可编辑,可选中等多种设置// popupMenu.getMenu().setGroupVisible(R.id.a, flag);// //设置group内容是否可见// popupMenu.getMenu().setGroupEnabled(R.id.a, flag);// //设置group内容是否操作// popupMenu.getMenu().setGroupCheckable(R.id.a,// flag);//设置group内容是否选中// 在menu中,得到用户点击的item项switch (item.getItemId()) {case R.id.title1:Toast.makeText(MainActivity.this, "Delete", 1).show();return true;case R.id.title2:Toast.makeText(MainActivity.this, "Edit", 1).show();return true;}return false;}});// 设定当前popupmenu消失时,相应的OnDismissListener事件popupMenu.setOnDismissListener(new OnDismissListener() {@Overridepublic void onDismiss(PopupMenu menu) {Toast.makeText(MainActivity.this, "消失", 1).show();}});}}
- Android_Menu常用菜单详解
- Android_Menu
- Android_Menu Demo
- JS常用菜单
- syslinux 常用菜单命令
- Android 常用代码---菜单
- syslinux 常用菜单命令
- LoadRunner 菜单常用设置
- 常用的树形菜单
- 二级联动菜单详解
- 二级联动菜单详解
- 详解右键关联菜单
- 网页菜单详解:基本原理
- Android---菜单详解
- android菜单详解
- Android菜单详解
- Android菜单详解
- Android菜单详解
- jquery操作复选框checkbox
- 基于 Quartz 开发企业级任务调度应用
- How to Create Partial Backups Using MySQL Enterprise Backup
- 实战数据结构(8)_单链表的就地逆置
- JVM调优总结(二)-一些概念
- Android_Menu常用菜单详解
- 解决:spring集成quartz,出现2次重复调用的问题
- activemq 启动错误
- 九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)
- 去IOE:去掉“IE”就Ok?
- Linux上程序调试的基石(2)--GDB
- JVM调优总结(三)-基本垃圾回收算法
- C++虚函数面试题(详解)
- JVM调优总结(四)-垃圾回收面临的问题