一、 菜单资源通常放在res/menu目录下,菜单资源是的根元素通常是<menu></menu>标记,在该标记下可以包含以下两个元素。
1.<item></item>标记:用于定义菜单项。
2.<group></group>标记:用于将多个<item></item>标记定义的菜单包装成一个菜单组。
在menu_main.xml的具体代码如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item android:id="@+id/item1" android:title="更换背景" android:alphabeticShortcut="g"></item>
<item android:id="@+id/item2" android:title="编辑组件" android:alphabeticShortcut="e"></item>
<item android:id="@+id/item3" android:title="恢复默认" android:alphabeticShortcut="r"></item>
<group android:id="@+id/setting">
<item android:id="@+id/sound" android:title="使用背景"></item>
<item android:id="@+id/video" android:title="背景音乐"></item>
</group>
</menu>
1.选项菜单(Option Menu)
当用户单击菜单按钮时,弹出的菜单就是选项菜单。使用菜单资源创建选项菜单的具体步骤如下。
(1)重写Activity中的onCreateOptionMenu()方法。在该方法中,首先创建衣蛾用于解析菜单资源文件的MenuInflater对象,然后调用该对象的inflate()方法解析一个菜单资源文件,并把解析后的菜单保存在menu中,关键代码如下:
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}(2)重写onOptionsItemSelected(),用于当菜单项被选中的做出相应的处理。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
Toast.makeText(MainActivity.this,item.getTitle(),Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
}当用户长时间按键不放是,弹出的菜单就是上下文菜单。步骤:
(1)在Activity的onCreate()方法注册上下文菜单
private TextView testMenu=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
testMenu= (TextView) findViewById(R.id.testMenu);
registerForContextMenu(testMenu); //为文本框注册上下文菜单
}(2)重写Activity中的onCreateContextMenu()方法。在该方法中,首先创建一个用于解析菜单资源文件的MenuInflater,然后调用该对象的inflate()方法解析一个菜单资源文件,并把解析出来的惨淡保存在menu中,最后为菜单设置图标和标题。关键代码如下:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater=new MenuInflater(this); //实例化一个MenuInflater对象
inflater.inflate(R.menu.menu_main,menu); //解析菜单文件
menu.setHeaderIcon(R.drawable.ic_launcher); //为菜单头设置图标
menu.setHeaderTitle("请选择"); //为菜单头设置图标
} @Override
public boolean onContextItemSelected(MenuItem item) {
Toast.makeText(MainActivity.this,item.getTitle(),Toast.LENGTH_SHORT).show();
return super.onContextItemSelected(item);
}
原文:http://blog.csdn.net/agonie201218/article/details/45361999