Android Menu
来源:互联网 发布:软件项目管理制度 编辑:程序博客网 时间:2024/06/04 00:52
珍惜作者劳动成果 转载请注明出处
普通菜单的实现
通常我们所说的菜单指的是我们屏幕右上方的”三个点” , 或者我们手机按键中的某个键, 一般会调出一个基于当前Activity的列表
实现步骤
1, 编写菜单xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- item就是一个菜单项 必须设置 id, title属性 (其他可选) 另外的一些属性, 在ActionBar功能中使用 id: 事件点击的判断, 区分点击的菜单 app:showAsAction: 菜单项是否显示 --> <item android:id="@+id/action_settings" android:title="@string/settings" /> <item android:icon="@mipmap/ic_launcher" app:showAsAction="always" android:id="@+id/action_help" android:title="@string/help"/></menu>
2, Activity 重写方法 进行菜单的加载
@Override public boolean onCreateOptionsMenu(Menu menu) { /* MenuInflater 用于把菜单xml文件, 加载进来, 添加到menu中 */ getMenuInflater().inflate(R.menu.main_menu, menu); /* 使用代码添加Menu groupId itemId order title menu.add(0, 0, 0, "设置"); */// menu.add(0, R.id.action_settings, 0, R.string.settings);// menu.add(0, R.id.action_help, 1, R.string.help); return true; }
3, Activity 重写方法, 菜单点击的事件处理
/*** OptionMenu 菜单点击时的事件回调* @param item* @return 如果返回true代表处理了点击事件, false表示不处理*/@Overridepublic boolean onOptionsItemSelected(MenuItem item) { Intent intent = null; switch (item.getItemId()) { case R.id.action_settings: //TODO: 处理菜单点击事件 (我要做但是还没做) Toast.makeText(MainActivity.this, "设置被点击了", Toast.LENGTH_SHORT).show(); intent = new Intent(this, SettingsActivity.class); startActivity(intent); break; case R.id.action_help: intent = new Intent(this, HelpActivity.class); startActivity(intent); break; } return true; }
上下文菜单的实现
上下文菜单是基于当前列表的某个Item项, 它的作用范围只针对这个Item, 也就是说, 当我们长按某一项时可以弹出悬浮菜单栏供我们选择, 该菜单栏面向的是你点击那一项. 它通常用于ListView或GridView
实现步骤
1, 菜单xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_copy" android:title="复制"/></menu>
2, 重写Activity方法, 加载上下文菜单
/** * 创建上下文菜单, * 每次需要显示上下文菜单的时候, 这个方法都会被调用 * * @param menu * @param v 需要显示上下文菜单的控件, 可以根据控件的Id, 来加载不同的菜单 * @param menuInfo */@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { getMenuInflater().inflate(R.menu.help_context_menu, menu);}
3, 上下文菜单点击
//点击事件 @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_copy: // TODO: 复制 //上下文菜单的附加信息, 只有在ListView和GridVIew中, 这个变量才可以使用 ContextMenu.ContextMenuInfo menuInfo = item.getMenuInfo(); if (menuInfo != null) { //如果是ListView或者GridView, 就用下面的这个类 AdapterView.AdapterContextMenuInfo adapterMenuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; String s = mStrings.get(adapterMenuInfo.position); Toast.makeText(HelpActivity.this, "复制" + s, Toast.LENGTH_SHORT).show(); } break; } return true; }
4, 给特定的控件设置上下文菜单, 通常用于ListView/GridView
ListView listView = (ListView) findViewById(R.id.help_list);if (listView != null) { listView.setAdapter(mAdapter); //设置上下文菜单的创建监听器, 内部当需要上下文的时候会自动调用创建的方法 //Activity自身就是一个监听器, 可以直接调用 listView.setOnCreateContextMenuListener(this); //高版本支持// if (Build.VERSION.SDK_INT >= 23) { //可以使用版本适配, 来进行特定方法的调用// listView.setOnContextClickListener(this);// }
PopupMenu菜单
/*** 点击按钮显示一个PopupMenu * @param view */public void btnShowPopupMenu(View view) { /* 1,创建PopupMenu对象 2, 获取MenuInflater对象 3, 显示 4, 实现菜单点击 */ // 第二个菜单: 代表弹出菜单在哪个控件上显示 PopupMenu popupMenu = new PopupMenu(this, view);// popupMenu.// getMenuInflater().// inflate(R.menu.settings_popup_menu,popupMenu.getMenu() ); popupMenu.inflate(R.menu.settings_popup_menu); //设置PopupMenu的item点击处理事件 popupMenu.setOnMenuItemClickListener(this); popupMenu.setGravity(Gravity.BOTTOM); popupMenu.show();}/** * Item的点击 * @param item * @return */ @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_copy: Toast.makeText(SettingsActivity.this, "复制", Toast.LENGTH_SHORT).show(); break; } return false; }
0 0
- Android Menu
- Android Menu
- android menu
- Android MENU
- android menu
- Android Menu
- Android Menu
- Android Menu
- android menu
- Android menu
- android menu
- Android Menu
- android menu
- Android Menu
- Android Menu
- Android Menu
- Android-Menu
- Android-menu
- [李景山php]每天laravel-20161103|CompilerEngine.php-2
- oracle 数据库分区
- mac的svn之cornerstone简易使用
- 《React-Native系列》26、 ReactNative实现图片上传功能
- MSSQL之二十一 存储过程案例
- Android Menu
- LeetCode 191 Number of 1 Bits (位运算)
- SpringMVC整合MyBatista
- 版本控制的重要性
- 电阻热噪声
- 预处理语句和存储过程
- 浅谈ROC曲线和KS曲线的关系
- [李景山php]每天laravel-20161104|Engine.php
- Android Dialog 与 Toast