标签:menu optionsmenu contextmenu popupmenu
1.重写Activity的onCreateOptionsMenu(Menu menu)方法,在该方法里调用Menu对象的方法来添加菜单项或子菜单。
2.如果希望应用程序能响应菜单项的单击事件,重写Activity中的onOptionsItemSelected(MenuItem item)方法即可。
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//Options菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//通过Activity得到填充Menu的填充器
getMenuInflater().inflate(R.menu.main, menu);
/**给Option添加item
* 参数1:分组的ID
* 参数2:该item的ID
* 参数3:添加顺序,从0开始
* 参数4:item显示的文本*/
menu.add(Menu.NONE, 1, 0, "0");
menu.add(Menu.NONE, 2, 2, "2");
menu.add(Menu.NONE, 4, 5, "5");
SubMenu subMenu = menu.addSubMenu("我还能点");
subMenu.add(Menu.NONE, 3, 6, "我是一个子选项");
//返回true显示菜单,返回false隐藏菜单
return true;
}
//给Option添加事件监听
@Override
public boolean onOptionsItemSelected(MenuItem item) {//按下menu键触发该方法
switch (item.getItemId()) {
case R.id.d:
Toast.makeText(this, "d", 0).show();
break;
case R.id.dmxy:
Toast.makeText(this, "dmxy", 0).show();
break;
case R.id.dom:
Toast.makeText(this, "dom", 0).show();
break;
case 2:
Toast.makeText(this, "2", 0).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.menudemo.MainActivity" >
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
<item
android:id="@+id/dmxy"
android:title="德玛西亚1"/>
<item
android:id="@+id/dom"
android:title="德玛西亚2"/>
<item
android:id="@+id/d"
android:title="0xml"
android:orderInCategory="0"/>
</menu>根节点必须为menu才能够正确的解析。上述可以看出来,order是指添加完事,放在哪个位置的一个排序:不写默认是第一个(两个都不写按照XML先后顺序),XML和Java代码中顺序相同则先加载XML的。其余的按照升序排序。
效果图:
1.重写Activity的onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)方法
2.调用Activity的registerForContextMenu(View view)方法给view组件注册上下文菜单。
3.如果系统事件能为菜单项提供响应,可以重写onContextItemSelected(MenuItem item)方法,或为指定菜单项绑定事件监听器。
MainActivity.java
public class MainActivity extends Activity {
private Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button) findViewById(R.id.btn);
registerForContextMenu(b);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(Menu.NONE, 1, 1, "红色");
menu.add(Menu.NONE, 2, 2, "蓝色");
menu.add(Menu.NONE, 3, 3, "绿色");
menu.add(Menu.NONE, 4, 4, "紫色");
//给这四个菜单项设置为单选的
menu.setGroupCheckable(0, true, true);
//设置上下文的标题和图标
menu.setHeaderIcon(R.drawable.ic_launcher);
menu.setHeaderTitle("选择背景色");
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
return super.onContextItemSelected(item);
}
}上下文菜单需要长按才能够触发。
效果图:
1.调用new PopupMenu(Context context, View anchor)创建下拉菜单,android代表要激活该组件弹出菜单的组件。
2.调用PopupMenu的inflate()方法显示弹出式菜单
3.调用PopupMenu的show()方法显示弹出式菜单
MainActivity.java
public class MainActivity extends Activity {
private Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button) findViewById(R.id.btn);
}
public void btn(View view) {
// 创建PopupMenu对象
PopupMenu menu = new PopupMenu(this, b);
// 将菜单的XML资源文件加载到popup菜单中
getMenuInflater().inflate(R.menu.popup_menu, menu.getMenu());
// 添加事件监听
menu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.add:
Toast.makeText(MainActivity.this, "添加", 0).show();
break;
case R.id.del:
Toast.makeText(MainActivity.this, "删除", 0).show();
break;
}
return false;
}
});
menu.show();
}
}popup_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/add"
android:title="添加"/>
<item
android:id="@+id/del"
android:title="删除"/>
<item
android:id="@+id/update"
android:title="修改"/>
<item
android:id="@+id/sele"
android:title="查询"/>
</menu>
弹出式菜单单击即可。
总结:
1.选项菜单order是由数值来决定的,越小越靠前,不给定数值在最前面。手机按键menu和右上角都可以打开选项菜单
2.上下文菜单需要长按才能够触发
3.弹出式菜单需要单击即可触发
前两者都在Activity中重写方法实现的,后者是需要Context参数即可实现。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:menu optionsmenu contextmenu popupmenu
原文地址:http://blog.csdn.net/u010829905/article/details/47083651