开发菜单和子菜单有两种方式;一是在Activity重写的方法onCreateOptionsMenu(Menu menu)方法中调用menu对象添加,然后在重写Activity的onOptionsItemSelected来响应选择的菜单项。二是通过资源文件 来定义菜单项,然后在onCreateOptionsMenu方法中加载这个xml资源。onCreateOptionsMenu方法在单击Menu键时 触发。
这里在资源文件中定义菜单项举例:
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/action_settings" android:title="@string/action_settings"
android
:orderInCategory=
"100"
app
:showAsAction=
"never"
<item
android:title="连接"
//控制选项的顺序,小上大下
android:orderInCategory="10"
android:id="@+id/connect"
//定义显示的方式,always表示可以直接看到,never表示在...中隐藏,ifRoom表示如果有位置就显示,不然就出现在右边的三个点中
//要注意的一点是下面是app:而不是android:,原因似乎是包的问题,
因为我使用的是android.support.v7.app.ActionBarActivity。
app
:showAsAction=
"always">
<menu>
//子菜单需要使用grouo进行包围,在其中可以设置子菜单的选择方式,包括,single单选,all多选,none不可选(就是没有后面的小标记了)
<group android:checkableBehavior="single">
<item android:id="@+id/color_red"
android:title="红"/>
<item android:id="@+id/color_blue"
android:title="蓝"/>
<item android:id="@+id/color_green"
android:title="绿"/>
group>
</menu>
</menu>
然后在MainActivity中重写onCreateOptionsMenu(Menu menu)方法,将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;
}
然后重写onOptionsItemSelected(MenuItem item)方法,设置好这些点击触发事件
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.
switch (item.getItemId()){
case R.id.
action_settings:
Toast.
makeText(getApplicationContext(),
"设置",Toast.
LENGTH_SHORT).show();
return true;
case R.id.
connect:
Toast.
makeText(getApplicationContext(),
"连接",Toast.
LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
使用代码的方式进行菜单的添加
重写onCreateOptionsMenu(Menu menu)方法
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0,1,Menu.NONE,"蓝牙发送").setIcon(android.R.drawable.ic_menu_send);
//添加子菜单
SubMenu subMenu = menu.addSubMenu(0,2,Menu.NONE,"重要程度").setIcon(android.R.drawable.ic_menu_share);
subMenu.add(2,201,1,"string");
return true;
}
上下文菜单(就是长按有效)ContextMenu
先写一下onCreate()中的代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//显示列表
simpleShowList();
//为所有列表项注册上下文菜单
this.registerForContextMenu(getListView());
}
然后我们需要在simpleShowList()中使用适配器adapter将数据与样式进行绑定并设置。
//数据适配器 simple array adapter
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(
this,android.R.layout.
simple_list_item_1,files);
//填充列表
this.setListAdapter(adapter);
之后需要将onCreateContextMenu()与onContextItemSelected()两个方法重写。
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle(
"文件操作");
menu.add(
0,
1, Menu.
NONE,
"蓝牙发送");
menu.add(
0,
2, Menu.
NONE,
"标记重要");
menu.add(
0,
3, Menu.
NONE,
"重命名");
menu.add(
0,
4,Menu.
NONE,
"删除");
}
onContextItemSelected()方法就不在这里写出了,大概都是一致的。