Android Menu菜单
来源:互联网 发布:mac py终端指的是什么 编辑:程序博客网 时间:2024/04/30 09:24
一、Android提供了一些简单的方法来为应用添加Menu菜单。
提供了三种类型应用菜单:
1、OptionsMenu:这中类型的菜单,是Android软件中的主菜单,主要提供一些功能的入口集合,通常情况下显示在软件的右上角三个点以下 的列表中(有菜单键的就不会显示三个点)2、ContextMenu(上下文菜单):通过手指长按才会显示(当前窗体失去焦点),弹出一个浮动在界面上方的类似于对话框性质的界面,上下文菜单通常和点击的条目有关3、PopupMenu(弹出菜单):可以在代码中设置何时显示,调用show()方法(当前窗体不会失去焦点)
二、定义Menu菜单、处理选项事件。
1、在/res/目录下新建menu文件夹,用于存储Menu XML资源文件2、在/res/menu/下main_menu.xml菜单界面描述文件(三种菜单界面文件的定义都一样)
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <!-- item 就是一个菜单项 必须设置 id, title 属性 另外的一些属性,在 ActionBar 功能中使用 id: 事件点击的判断,区分点击的是那个菜单 --> <item android:id="@+id/action_settings" android:title="@string/settings" /> <!-- 1. 帮助;2. 点击跳转新的Activity;3. app:showAsAction="always" --> <item android:id="@+id/action_help" android:title="@string/help" app:showAsAction="always" android:icon="@mipmap/ic_launcher" /></menu>
3.菜单加载和点击事件处理
(1)OptionsMenu: // 1. 编写菜单xml // 2. Activity 重写方法,进行菜单的加载 // 3. Activity 重写方法,实现菜单点击的事件处理 @Override public boolean onCreateOptionsMenu(Menu menu) { // MenuInflater 用于把菜单 xml 文件,加载进来,添加到 menu 中 //getMenuInflater().inflate(R.menu.main_menu, menu); // 代码添加: // groupId, itemId, order, title menu.add(0, R.id.action_settings, 0, R.string.settings); menu.add(0, R.id.action_help, 0, R.string.help); return true; } /** * OptionsMenu 菜单项点击时的事件回调 * @param item * @return 返回 true 代表处理了点击; */ @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); Intent intent; switch (itemId) { 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; }
(2) ContextMenu: 与ListView结合使用public class ContextMenuActivity extends AppCompatActivity { private List<String> mStrings; private ArrayAdapter<String> mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_help); mStrings = new ArrayList<>(); for (int i = 0; i < 100; i++) { mStrings.add("Java - " + i); } mAdapter = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, mStrings); 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); //} } } // 1. 菜单XML // 2. 重写Activity方法,加载上下文菜单 // 3. 上下文菜单点击 // 4. 给特定的控件设置上下文菜单,通常用于ListView/GridView /** * 创建上下文菜单,每次需要显示上下文菜单的时候,这个方法都会被调用 * * @param menu * @param v 需要显示上下文菜单的控件,可以根据这个控件的ID,来加载不同的菜单 * @param menuInfo */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { getMenuInflater().inflate(R.menu.help_context_menu, menu); } @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(ContextMenuActivity.this, "复制 " + s, Toast.LENGTH_SHORT).show(); } break; } return true; }}
(3) PopupMenu:public class PopupMenuActivity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); } /** * 点击按钮,显示一个PopupMenu * @param view */ public void btnShowPopupMenu(View view) { // 1. 创建PopupMenu 对象 // 2. 获取MenuInflater,加载菜单XML // 3. 显示 // 4. 实现菜单的点击 // 第二个参数,代表弹出菜单在哪个控件上显示 PopupMenu popupMenu = new PopupMenu(this, view); popupMenu .getMenuInflater() .inflate(R.menu.settings_popup_menu, popupMenu.getMenu()); // 设置PopupMenu的item点击处理事件 popupMenu.setOnMenuItemClickListener(this); //设置菜单与控件的对齐方式 popupMenu.setGravity(Gravity.TOP); popupMenu.show(); } /** * Item菜单点击 * @param item * @return */ @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_copy: Toast.makeText(SettingsActivity.this, "PopupMenu 复制", Toast.LENGTH_SHORT).show(); break; } return true; }}
三. 菜单对比
1.OptionsMenu:对应整个标题菜单和Activity功能的跳转
2.ContextMenu:对应某一个控件或者ListView的某一个Item,长按才会出来菜单,事件的处理,也是针对一项。
3.PopupMenu: 可以直接显示在指定的控件上的菜单,不需要长按这种操作方式,直接通过代码来指定显示的控件位置的。使用场景:联系人列表,点击直接出菜单的方式,新闻客户端 新闻列表部分,点击出现弹出列表,能够进行分享,转发,收藏等。
0 0
- Menu功能菜单 android
- 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菜单
- 表单元素练习一
- C#之WinForm基础 给textbox空间添加水平,垂直滚动条
- leancloud 使用的坑lists
- 深度学习笔记(三):激活函数和损失函数
- 对链表排序
- Android Menu菜单
- Centos 学习之路
- 带权并查集
- Java之静态内部类(static class)
- MyBatis Insert获取自增主键ID
- XML解析--小项目实战(联系人管理系统)
- navigator.geolocation
- ORACLE sql语法的表示问题
- Linux常用命令