menu在Activity中是非常常见的, 那么如何写一个menu呢?
在Android中menu有三种:
1. OptionsMenu 主菜单
2. ContextMenu 上下文菜单
3. PopupMenu 弹出菜单
OptionMenu
- 首先创建一个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">
<!--
showAsAction 可以使它在菜单栏上显示
icon : 为菜单栏上的功能设置图片
-->
<item
android:title="@string/Settings"
android:id="@+id/action_settings"
/>
<item
android:title="@string/help"
android:id="@+id/action_help"
app:showAsAction="always"
android:icon="@mipmap/ic_launcher"
/>
</menu>
- 将菜单加载到布局上, 就需要重写方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//getMenuInflater 用于将xml文件, 添加到menu中
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
- 再对item设置点击事件, 实现跳转等功能的实现
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId){
case R.id.action_settings:
// TODO: 处理菜单点击事件
Toast.makeText(MainActivity.this, "设置被点击了", Toast.LENGTH_SHORT).show();
break;
case R.id.action_help:
Intent intent = new Intent(this, helpActivity.class);
startActivity(intent);
}
return true;
}
ContextMenu
ContextMenu主要是针对一个控件, 常用于ListView和GridView. 例如:对ListView中的一条item进行一系列的动作, 都可以通过ContextMenu来进行, 只要定义menu的行为(即 为menu中的条目设置id, 通过id找到, 并进行操作), 再重写onContextItemSelected方法就可以了.
menu的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_copy"
android:title="@string/helping"
/>
</menu>
设置点击事件要重写的方法:
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
//通过id找到
case R.id.action_copy:
// TODO:复制
//上下文菜单的附加信息, 只有在ListView和GridView中才可以使用
//ContextMenuInfo 得到当前item的信息
ContextMenu.ContextMenuInfo menuInfo = item.getMenuInfo();
AdapterView.AdapterContextMenuInfo adapterContextMenuInfo =
(AdapterView.AdapterContextMenuInfo) menuInfo;
//得到item中的数据信息, 如果不进行上一步的强转就无法得到position
String s = strings.get(adapterContextMenuInfo.position);
Toast.makeText(helpActivity.this, "复制", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
PopupMenu
弹出菜单, 即 我们点击某一个控件会弹出菜单的一种方式. 它的xml布局和之前的相同, 就不多说啦.
它要显示在哪个Activity上, 点击哪个控件时会弹出, 都是这个菜单所要设置的.
首先我们要设置一个显示的方法, 代码是这个样子哒:
public void btnShowPopupMenu(View view) {
//第二个参数, 代表弹出菜单在哪个控件上显示
PopupMenu popupMenu = new PopupMenu(this, view);
//填充
popupMenu.getMenuInflater()
.inflate(R.menu.seetings_popup_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(this);
popupMenu.show();
}
另外还要设置点击事件, 即 我们点击这个菜单上的某一项功能时的具体实现. 这里只是弹出了一个Toast, 没有什么具体的操作, 大家了解就好.
代码是这个样子哒:
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.action_copy:
Toast.makeText(SeetingsActivity.this, "success", Toast.LENGTH_SHORT).show();
break;
}
return false;
}
三种形式的菜单栏就介绍完了, 有什么不正确的地方还请大神们指正.