android基础知识2:MENU菜单

来源:互联网 发布:mysql 5.1.51.tar.gz 编辑:程序博客网 时间:2024/04/26 01:30

本文主要介绍两种菜单:选项菜单和上下文菜单。

1.选项菜单是你点击menu键出现在屏幕的下面的选项,很多软件都有选项菜单的使用。如联系人设置,分享等。只不过现在越来越多的手机选择取消menu菜单,所以ActionBar成了替代Menu的控件。还有就是很多软件自己定义了选项菜单。如UC浏览器。
2.上下文菜单主要是长按事件。如记事本的复制 粘贴等。 在长按过程中,我们还可以传递一些数据。


一:选项菜单。

(1)直接添加.

menu选项有两种添加方式,一种是在代码中直接通过menu.add添加。一种是在xml中定义,然后添加通过getMenuInflater添加到代码中。
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// 显示一个menu菜单// TODO Auto-generated method stubmenu.add(0, 0, 0, "关于");/* * MenuItem m = menu.add(0, 1, 1, "退出"); m.setIntent(new * Intent(this,Other.class)); m.setOnMenuItemClickListener(new * OnMenuItemClickListener(){ *  * @Override public boolean onMenuItemClick(MenuItem item) { * //注意这个地方有一个返回值。 // TODO Auto-generated method stub * Toast.makeText(MainActivity.this, "good", Toast.LENGTH_LONG).show(); * return true ; //返回false和返回true不知道有什么区别。 } *  * }); //可以直接實現跳轉 */SubMenu fileMenu = menu.addSubMenu(0, 7, Menu.NONE, "file"); // 建立父菜单的选项SubMenu editMenu = menu.addSubMenu(0, 8, Menu.NONE, "edit");fileMenu.setIcon(R.drawable.ic_launcher);fileMenu.setHeaderIcon(R.drawable.ic_launcher);fileMenu.setHeaderTitle("请选择你要的颜色:");fileMenu.add(0, 1, Menu.NONE, "new"); // 建立子菜单选项fileMenu.add(0, 2, Menu.NONE, "open");fileMenu.add(0, 3, Menu.NONE, "save");fileMenu.setGroupCheckable(0, true, true); // 这三个属性是什么意思。editMenu.add(0, 4, Menu.NONE, "undo").setCheckable(true);// 设置个别选项为可选按钮editMenu.add(0, 5, Menu.NONE, "redo");return super.onCreateOptionsMenu(menu);// 此方法用户创建菜单/* * menu.add(int groupId,int itemId,int order,int titleRes) groupId * :所有操作群组的ID itemId ;每一个操作项目的Id order : 操作项目的安排顺序 titleRes : * 操作项目所显示的标题。 menu.add(0,0,0,"视频") .setIcon(R.drawable.ic_launcher) * 设置背景图片, .setShortcut('0', 'a'); 设置快捷键方式。点击a的时候相应事件。 */}public boolean onPrepareOptionsMenu(Menu menu) {// 选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。return false;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// 点击的时候触发// TODO Auto-generated method stubsuper.onOptionsItemSelected(item);switch (item.getItemId()) {case 0:Toast.makeText(MainActivity.this, "点击了选项菜单", Toast.LENGTH_LONG).show();break;case 1:this.finish(); // 当为一的时候,退出程序。}return true;}public void onOptionsMenuClosed(Menu menu) {// 当菜单关闭的时候执行}public boolean onMenuOpened(int featureId, Menu menu) {// 单打开后发生的动作。return false;}

(2)通过xml添加:

public boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubMenuInflater in = getMenuInflater();in.inflate(R.menu.option_menu, menu);return true;}
res/menu/option_item.xml
<?xml version="1.0" encoding="utf-8"?>  <menu xmlns:android="http://schemas.android.com/apk/res/android" >      <item android:id="@+id/item1"          android:title="视频"/>       <item android:id="@+id/item2"          android:title="上传"/>  </menu>  

(3)自定义菜单

Android 菜单(OptionMenu)大全 建立你自己的菜单

(4)动态显示的菜单-根据代码显示不同的菜单选项

Android的Menu状态动态设置方法onPrepareOptionsMenu(Menu menu)  

Android实例剖析笔记(二)          这个介绍了android例子中的动态菜单技术,没有怎么看懂。大致意思就是注册CATEGORY_ALTERNATIVE。判断增加一个动态菜单。

2.上下文菜单

(1)定义所有的上下文

@Override      public void onCreateContextMenu(ContextMenu menu, View v,                      ContextMenuInfo menuInfo) {              // TODO Auto-generated method stub              super.onCreateContextMenu(menu, v, menuInfo);              menu.add(0,0,0,"1");  //建立上下文菜单              menu.add(0,1,0,"d");      }      @Override      public boolean onContextItemSelected(MenuItem item) {              // TODO Auto-generated method stub              AlertDialog.Builder builder = new AlertDialog.Builder(this);  //新建一个窗口              builder.setTitle("Title");  //设置窗口的标题               String message =null ;                switch(item.getItemId())   //判断点击的是那个菜单              {              case 0 :                      message="0";                      break;              case 1 :                      message="1";          break ;              }                            builder.setMessage(message) ;   //设置显示信息              builder.setPositiveButton("OK", new android.content.DialogInterface.OnClickListener() {                                            @Override                      public void onClick(DialogInterface dialog, int which) {                              // TODO Auto-generated method stub                              setResult(RESULT_OK);                      }              });    //添加一个点击事件到窗口              builder.create();  //建立这个窗口              builder.show(); // 显示这个窗口              return true ;      }      } 

另外,在onCreateContextMenu中,可以通过ContextMenuInfo menuInfo传递数据。
@Override      public void onCreateContextMenu(ContextMenu menu, View view,              ContextMenuInfo menuInfo) {          // Inflate the menu from xml.          getMenuInflater().inflate(R.menu.context_menu, menu);              // Use the current item to create a custom view for the header.          final AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;          final Cursor c =                  (Cursor) mAlarmsList.getAdapter().getItem(info.position);              }  

(2)可以单独定义一个TextView的上下文选项

 TextView eidt = (TextView)findViewById(R.id.textview);         //先在Activity中定义一个view  registerForContextMenu(eidt);             //  注册这个view的事件,为menu事件,当长时间按住这个view的时候,事件将会被触及。//然后重写onCreateContextMenu这个方法,定义自己想要的menu菜单。



原创粉丝点击