Anddroid之Menu用法
2015-07-31 16:32
351 查看
菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)
一、概述
public boolean onCreateOptionsMenu(Menu menu)
使用此方法调用OptionsMenu
public boolean onOptionsItemSelected(MenuItem item)
选中菜单项后发生的动作。
public void onOptionsMenuClosed(Menu menu)
菜单关闭后发生的动作。
public boolean onPrepareOptionsMenu(Menu menu)
选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
public boolean onMenuOpened(int featureId, Menu menu)
单打开后发生的动作。
二、默认样式
默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。
效果如图:
三、自定义样式
结果如图:
一、概述
public boolean onCreateOptionsMenu(Menu menu)
使用此方法调用OptionsMenu
public boolean onOptionsItemSelected(MenuItem item)
选中菜单项后发生的动作。
public void onOptionsMenuClosed(Menu menu)
菜单关闭后发生的动作。
public boolean onPrepareOptionsMenu(Menu menu)
选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
public boolean onMenuOpened(int featureId, Menu menu)
单打开后发生的动作。
二、默认样式
默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。
/** * 系统默认的菜单选项 * @author KiWi */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * 重载onCreateOptionsMenu(Menu menu)方法 * 并在此方法中添加菜单项 最后返回true,如果false,菜单则不会显示。 */ @Override public boolean onCreateOptionsMenu(Menu menu) { /** * add()方法的四个参数,依次是: * 1、组别,如果不分组的话就写Menu.NONE, * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单 * 3、顺序,那个菜单现在在前面由这个参数的大小决定 * 4、文本,菜单的显示文本 */ menu.add(Menu.NONE,Menu.FIRST + 1,5,"删除").setIcon(android.R.drawable.ic_delete); menu.add(Menu.NONE,Menu.FIRST + 2,2,"保存").setIcon(android.R.drawable.ic_menu_edit); menu.add(Menu.NONE,Menu.FIRST + 3,6,"帮助").setIcon(android.R.drawable.ic_menu_help); menu.add(Menu.NONE,Menu.FIRST + 4,1,"添加").setIcon(android.R.drawable.ic_menu_add); menu.add(Menu.NONE,Menu.FIRST + 5,4,"详细").setIcon(android.R.drawable.ic_menu_info_details); menu.add(Menu.NONE,Menu.FIRST + 6,3,"发送").setIcon(android.R.drawable.ic_menu_send); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case Menu.FIRST + 1: Toast.makeText(this,"删除菜单被点击了",0).show(); break; case Menu.FIRST + 2: Toast.makeText(this,"保存菜单被点击了",0).show(); break; case Menu.FIRST + 3: Toast.makeText(this,"帮助菜单被点击了",0).show(); break; case Menu.FIRST + 4: Toast.makeText(this,"添加菜单被点击了",0).show(); break; case Menu.FIRST + 5: Toast.makeText(this,"详细菜单被点击了",0).show(); break; case Menu.FIRST + 6: Toast.makeText(this,"发送菜单被点击了",0).show(); break; default: break; } return false; } @Override public void onOptionsMenuClosed(Menu menu) { Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show(); } }
效果如图:
三、自定义样式
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <GridView android:id="@+id/gv_menu" android:layout_height="match_parent" android:layout_width="match_parent" android:numColumns="4" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout_Item" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="5dip" > <ImageView android:id="@+id/item_image" android:src="@drawable/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" > </ImageView> <TextView android:id="@+id/item_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/item_image" android:layout_centerHorizontal="true" android:text="选项" > </TextView> </RelativeLayout>
/** * 自定义菜单 * @author KiWi */ public class CusActivity extends Activity { private boolean isMore = false; // menu菜单翻页控制 private AlertDialog mDialog; // menu菜单Dialog private View mView; private GridView mGv; private final int ITEM_MORE = 11; /** 菜单图片 **/ int[] menu_image_array = {R.drawable.menu_search,R.drawable.menu_filemanager, R.drawable.menu_downmanager,R.drawable.menu_fullscreen,R.drawable.menu_inputurl, R.drawable.menu_bookmark,R.drawable.menu_bookmark_sync_import, R.drawable.menu_sharepage,R.drawable.menu_quit,R.drawable.menu_nightmode, R.drawable.menu_refresh,R.drawable.menu_more}; /** 菜单文字 **/ String[] menu_name_array = {"搜索","文件管理","下载管理","全屏","网址","书签","加入书签","分享页面","退出","夜间模式","刷新", "更多"}; /** 菜单图片2 **/ int[] menu_image_array2 = {R.drawable.menu_auto_landscape,R.drawable.menu_penselectmodel, R.drawable.menu_page_attr,R.drawable.menu_novel_mode,R.drawable.menu_page_updown, R.drawable.menu_checkupdate,R.drawable.menu_checknet,R.drawable.menu_refreshtimer, R.drawable.menu_syssettings,R.drawable.menu_help,R.drawable.menu_about, R.drawable.menu_return}; /** 菜单文字2 **/ String[] menu_name_array2 = {"自动横屏","笔选模式","阅读模式","浏览模式","快捷翻页","检查更新","检查网络","定时刷新","设置","帮助", "关于","返回"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cus); initView(); } private void initView() { mView = View.inflate(this,R.layout.menu_style,null); mGv = (GridView)mView.findViewById(R.id.gv_menu); mDialog = new AlertDialog.Builder(this).setView(mView).create(); mDialog.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog,int keyCode,KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { dialog.dismiss(); } return false; } }); mGv.setAdapter(getMenuAdapter(menu_name_array,menu_image_array)); /** * 监听Menu选项 */ mGv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent,View view,int position,long id) { switch(position){ case ITEM_MORE: if (isMore) { mGv.setAdapter(getMenuAdapter(menu_name_array2,menu_image_array2)); isMore = false; }else { mGv.setAdapter(getMenuAdapter(menu_name_array,menu_image_array)); isMore = true; } mGv.invalidate(); mGv.setSelection(ITEM_MORE); break; default: break; } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add("menu");// 必须创建一项 return super.onCreateOptionsMenu(menu); } /** * 如果第一次打开则设置视图,否则直接显示menuDialog视图。 */ @Override public boolean onMenuOpened(int featureId,Menu menu) { if (mDialog == null) { mDialog = new AlertDialog.Builder(this).setView(mView).show(); }else { mDialog.show(); } return false; // 返回为true 则显示系统menu } /** * 菜单添加菜单项 */ private SimpleAdapter getMenuAdapter(String[] menuNames,int[] menuImages) { ArrayList<HashMap<String,Object>> datas = new ArrayList<HashMap<String,Object>>(); for (int i = 0;i < menuNames.length;i++) { HashMap<String,Object> map = new HashMap<String,Object>(); map.put("itemImage",menuImages[i]); map.put("itemName",menuNames[i]); datas.add(map); } SimpleAdapter sa = new SimpleAdapter(this,datas,R.layout.menu_item,new String[]{ "itemImage","itemName"},new int[]{R.id.item_image,R.id.item_text}); return sa; } }
结果如图:
相关文章推荐
- jQuery 插件集锦——《导航篇》
- PCIe SSD Wear-Leveling磨损均衡
- 20150725 前端开发工具DreamWeaver及Sublime方法技巧总结
- Rice-IIIP (1)
- jmp指令对应的机器码
- MFC&ATL&STL比较
- HDOJ1025(最长上升子序列)
- 暑假集训第三周第二阶段 搜索 D - 变形课
- 碉堡了!麻省理工学院开发出自动修复 Bug 的系统
- 如何使用php实现评委评分器
- 分享一个最近很火的响应式后台模板
- 【第二弹】【POJ1276】【Cash Machine】
- Java多线程总结
- UITableView - 2
- WPF BitMapImage 占用删除问题,更换头像问题
- Centos添加新硬盘、分区、格式化、自动挂载
- android rectF
- memcache的启动
- echarts中的柱状图使用
- 20150724 CSS3学习笔记(下)