读书人

(9)菜单

发布时间: 2012-10-07 17:28:51 作者: rapoo

(九)菜单

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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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);    }  }

?

很奇怪,之前怎么都运行不了,重新创建复制代码重新编译就可以运行了。



?

(9)菜单

?

?

通过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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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); }}

?
?
?

(9)菜单


(9)菜单
?

子菜单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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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);  }  }

?


(9)菜单

点击编辑:
(9)菜单
?

?

上下文菜单 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); //绑定适配器setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,strs));registerForContextMenu(getListView());}//创建menupublic 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的itemIDAdapterContextMenuInfo 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);}}

?

?

?

(9)菜单

?


(9)菜单
?点击其中一项:


(9)菜单
?

读书人网 >移动开发

热点推荐