menu键触发
三种形式:普通的option menu;上下文菜单 context menu;子菜单sub menu;
创建方式:一:在xml文件中创建menu资源,二在java代码中创建;
标签 | 描述 |
menu | 是其他两个标签的容器,必须有一个menu标签作为该文件的根标签。 |
group | 一个可选的标签,在该标签下的item内容分为一组,通过分组可以实现多个tiem共享属性。 |
tiem | 创建了一个menuItem,即一个menu中单独的条目,在该标签下开可以包含menu标签,代表子菜单。 |
android自带了一些图标资源
java中使用:menu.setIcon(android.R.drawable.ic_menu_save)
xml中使用:android:icon="@android:drawable/ic_menu_sava"
普通的option menu
一:通过xml文件创建,创建在menu文件夹下:
android默认显示2行3列6个菜单项,超过留个,则会有个more...选项。
orderInCategory表示的是item的排序
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/item1" android:title="save" android:orderInCategory="0"/> <item android:id="@+id/item2" android:orderInCategory="1" android:title="管理"/> <item android:id="@+id/item3" android:title="帮助"/> <item android:id="@+id/item4" android:title="信息"/> <item android:id="@+id/item5" android:title="分享"/> <group android:id="@+id/group1" android:menuCategory="secondary"> <item android:id="@+id/groupItem1" android:title="删除"/> <item android:id="@+id/groupItem2" android:title="编辑"/> </group> </menu>
创建了options menu需要覆盖onCreatOptionsMenu(Menu menu)方法。在该方法中通过MenuInflater.inflater()方法为menu加入menu资源。
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater=getMenuInflater(); inflater.inflate(R.menu.activity_main, menu); return super.onCreateOptionsMenu(menu); } }
很奇怪,之前怎么都运行不了,重新创建复制代码重新编译就可以运行了。
通过java代码创建menu:
重写onCreateOptionsMenu方法创建一个menu,Add方法添加MenuItem
重写onOptionItemSelected方法,监听menu操作。
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //覆盖该方法,创建menu @Override public boolean onCreateOptionsMenu(Menu menu) { //通过add方法,创建一个menuItem对象,参数为组ID,ItemID,顺序,显示的文本 menu.add(0, 1, 1, "分享").setIcon(android.R.drawable.ic_menu_share); menu.add(0, 2, 2, "保存").setIcon(android.R.drawable.ic_menu_save); return super.onCreateOptionsMenu(menu); } //监听menu点击事件 public boolean onOptionsItemSelected(MenuItem item){ //根据id判断点击的位置 if(item.getItemId()==1) { Toast.makeText(this, "你点击了分享", Toast.LENGTH_LONG).show(); } else if(item.getItemId()==2) { Toast.makeText(this, "你点击了保存", Toast.LENGTH_LONG).show(); } return super.onOptionsItemSelected(item); } }
子菜单SubMenu:
xml中创建:在item标签下包含新的menu标签。menu下的内容为子菜单。
java代码创建:
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.SubMenu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //覆盖该方法,创建menu @Override public boolean onCreateOptionsMenu(Menu menu) { //通过add方法,创建一个menuItem对象,参数为组ID,ItemID,顺序,显示的文本 menu.add(0, 1, 1, "分享").setIcon(android.R.drawable.ic_menu_share); menu.add(0, 2, 2, "保存").setIcon(android.R.drawable.ic_menu_save); //创建子菜单,创建submenu对象,该对象调用add方法创建子菜单条目 SubMenu subMenu=menu.addSubMenu(1, 10, 10, "编辑"); subMenu.setIcon(android.R.drawable.ic_menu_edit); //增加子菜单条目 subMenu.add(2, 11, 11, "增加"); subMenu.add(2, 11, 11, "减少"); return super.onCreateOptionsMenu(menu); } }
上下文菜单 context menu:
长按某选项弹出的菜单。
为任何的view绑定一个context menu,不过用的最多的是在listview中为listview的条目绑定一个contextmenu。不小心extends 成了Activity造成后面很多错误。
import android.app.ListActivity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ArrayAdapter; import android.widget.Toast; public class MainActivity extends ListActivity { private static final String[] strs=new String[]{ "first","second","third","fourth","fifth"}; public static final int CONTEXT_MENU_1=Menu.FIRST; public static final int CONTEXT_MENU_2=Menu.FIRST+1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //绑定适配器 setListAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1,strs)); registerForContextMenu(getListView()); } //创建menu public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu, v, menuInfo); menu.add(0, CONTEXT_MENU_1, 1, "Context Menu 1"); menu.add(0, CONTEXT_MENU_2, 2, "Context Menu 2"); menu.setHeaderTitle("context Menu Title");//设置菜单标题 } //响应menu选择事件 public boolean onContextItemSelected(MenuItem item) { //获得listview的itemID AdapterContextMenuInfo info=(AdapterContextMenuInfo)item.getMenuInfo(); switch(item.getItemId()) { case 1:Toast.makeText(this, "你点击了第一项", Toast.LENGTH_LONG).show(); case 2:Toast.makeText(this, "你点击了第二项", Toast.LENGTH_LONG).show(); } return super.onContextItemSelected(item); } }