码迷,mamicode.com
首页 > 移动开发 > 详细

Android中的菜单

时间:2015-03-19 18:26:32      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

一个菜中包括多个菜单项MenuItem),在一个菜中最多只会示两行散列的菜单项,如果菜单项了六个,超的会自动隐藏,会出更多提示用

android中菜一共分三种:选项OptionsMenu)、上下文菜ContextMenu)、和子菜SubMenu.

一:选项

暂时不需要配置文件

只需在Activity行完成

package com.qn.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
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.main);
    }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {//
置多个菜单项
  menu.add(Menu.NONE, Menu.FIRST+1, 5, "
")
  .setIcon(android.R.drawable.ic_menu_delete);
  menu.add(Menu.NONE,Menu.FIRST+2,6,"
保存")
  .setIcon(android.R.drawable.ic_menu_save);
  menu.add(Menu.NONE,Menu.FIRST+3,7,"
帮助")
  .setIcon(android.R.drawable.ic_menu_help);
  menu.add(Menu.NONE,Menu.FIRST+4,8,"
添加")
  .setIcon(android.R.drawable.ic_menu_add);
  menu.add(Menu.NONE,Menu.FIRST+5,9,"
")
  .setIcon(android.R.drawable.ic_menu_info_details);
  menu.add(Menu.NONE,Menu.FIRST+6,10,"
")
  .setIcon(android.R.drawable.ic_menu_send);
  menu.add(Menu.NONE,Menu.FIRST+7,11,"
编辑")
  .setIcon(android.R.drawable.ic_menu_edit);
  return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {//
判断菜单项的操作
  switch (item.getItemId()) {
  case Menu.FIRST+1:
   Toast.makeText(MainActivity.this, "
选择", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+2:
   Toast.makeText(MainActivity.this, "
选择了保存", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+3:
   Toast.makeText(MainActivity.this, "
选择了帮助", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+4:
   Toast.makeText(MainActivity.this, "
选择了添加", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+5:
   Toast.makeText(MainActivity.this, "
选择", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+6:
   Toast.makeText(MainActivity.this, "
选择", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+7:
   Toast.makeText(MainActivity.this, "
选择编辑", Toast.LENGTH_SHORT).show();
   break;

  }
  return false;
 }

 @Override
 public void onOptionsMenuClosed(Menu menu) {//
单项的操作
  Toast.makeText(MainActivity.this, "
选项", Toast.LENGTH_SHORT).show();
 }

 @Override
 public boolean onPrepareOptionsMenu(Menu menu) {//
单项显示前触的操作
  Toast.makeText(MainActivity.this, "
在菜
单显", Toast.LENGTH_SHORT).show();
  return true;
  
}

技术分享


2.上面的菜单项的内容都是固定出的,根据MVC模式肯定要通配置文件完成,下面是通配置文件完成。直接在res/menu/mymenu.xml文件

1.源配置文件

?xml version="1.0" encoding="utf-8"?>


  
    android:id="@+id/item01"
    android:title="
添加"
    android:icon="@android:drawable/ic_menu_add"
    /> 
   
    android:id="@+id/item02"
    android:title="
保存"
    android:icon="@android:drawable/ic_menu_save"
    /> 
   
    android:id="@+id/item03"
    android:title="
编辑"
    android:icon="@android:drawable/ic_menu_edit"
    /> 
   
    android:id="@+id/item04"
    android:title="
"
    android:icon="@android:drawable/ic_menu_info_details"
    /> 
   
    android:id="@+id/item05"
    android:title="
"
    android:icon="@android:drawable/ic_menu_delete"
    /> 
   
    android:id="@+id/item06"
    android:title="
"
    android:icon="@android:drawable/ic_menu_send"
    />   
   
    android:id="@+id/item07"
    android:title="
帮助"
    android:icon="@android:drawable/ic_menu_help"
    /> 

2.当准源配置文件后

依靠MenuInflater完成转换,此只需要修改菜建操作

package com.qn.m;

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
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.main);
    }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {//
置多个菜单项
  super.getMenuInflater().inflate(R.menu.mymenu, menu);
  return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {//
判断菜单项的操作
  switch (item.getItemId()) {
  case Menu.FIRST+1:
   Toast.makeText(MainActivity.this, "
选择", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+2:
   Toast.makeText(MainActivity.this, "
选择了保存", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+3:
   Toast.makeText(MainActivity.this, "
选择了帮助", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+4:
   Toast.makeText(MainActivity.this, "
选择了添加", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+5:
   Toast.makeText(MainActivity.this, "
选择", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+6:
   Toast.makeText(MainActivity.this, "
选择", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+7:
   Toast.makeText(MainActivity.this, "
选择编辑", Toast.LENGTH_SHORT).show();
   break;

  }
  return false;
 }

 @Override
 public void onOptionsMenuClosed(Menu menu) {//
单项的操作
  Toast.makeText(MainActivity.this, "
选项", Toast.LENGTH_SHORT).show();
 }

 @Override
 public boolean onPrepareOptionsMenu(Menu menu) {//
单项显示前触的操作
  Toast.makeText(MainActivity.this, "
在菜
单显", Toast.LENGTH_SHORT).show();
  return true;
  
}

技术分享



事例三:上下文菜

上下文菜非常似于windows中右的操作形式,下面个程序中我要使用ListView与上下文菜单联系起来,但是要想使他们联系起来,注册

registerForContextMenu(listView);//上下文菜可以和listview融合在一起了

如下

只需要在Activity中完成

package com.qn.m;

import android.app.Activity;
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.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
   
 private String data[]=new String[]{"IJRQN","
未来的名字","早会实现","次上天不会了",
   "
我喜
你很久了"};
 private  ListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listView=new ListView(MainActivity.this);
        listView.setAdapter(new ArrayAdapter(MainActivity.this,
          android.R.layout.simple_expandable_list_item_1,data));
        super.setContentView(listView);
        registerForContextMenu(listView);//
上下文菜
可以和listview融合在一起了
    }
 @Override
 public boolean onContextItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case Menu.FIRST+1:
   Toast.makeText(MainActivity.this, "
选择的是-添加系人", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+2:
   Toast.makeText(MainActivity.this, "
选择的是-", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+3:
   Toast.makeText(MainActivity.this, "
选择的是-除信息", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+4:
   Toast.makeText(MainActivity.this, "
选择的是-另存", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+5:
   Toast.makeText(MainActivity.this, "
选择的是-编辑", Toast.LENGTH_SHORT).show();
   break;
  default:
   break;
  }
  return super.onContextItemSelected(item);
 }
 @Override
 public void onContextMenuClosed(Menu menu) {
  Toast.makeText(MainActivity.this, "
上下文菜", Toast.LENGTH_SHORT).show();
 }
 @Override
 public void onCreateContextMenu(ContextMenu menu, View v,
   ContextMenuInfo menuInfo) {
  super.onCreateContextMenu(menu, v, menuInfo);
  menu.setHeaderTitle("
信息提示");
  menu.add(Menu.NONE, Menu.FIRST+1, 1, "
添加
系人");
  menu.add(Menu.NONE, Menu.FIRST+2, 2, "
");
  menu.add(Menu.NONE, Menu.FIRST+3, 3, "
除信息");
  menu.add(Menu.NONE, Menu.FIRST+4, 4, "
另存
");
  menu.add(Menu.NONE, Menu.FIRST+5, 5, "
编辑");
    
}

 

 技术分享

 

事例四同上下文菜也可以通配置文件完成

1.menu相同直接在res/menu/mymenu.xml文件

?xml version="1.0" encoding="utf-8"?>


   
    android:id="@+id/item02"
    android:title="
添加系人"
    /> 
   
    android:id="@+id/item03"
    android:title="
"
    /> 
   
    android:id="@+id/item04"
    android:title="
除信息"
    /> 
   
    android:id="@+id/item05"
    android:title="
另存
"
    /> 
   
    android:id="@+id/item06"
    android:title="
编辑"
    />   

 2.Activity中完成代

package com.qn.m;

import android.app.Activity;
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.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
   
 private String data[]=new String[]{"IJRQN","
未来的名字","早会实现","次上天不会了",
   "
我喜
你很久了"};
 private  ListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listView=new ListView(MainActivity.this);
        listView.setAdapter(new ArrayAdapter(MainActivity.this,
          android.R.layout.simple_expandable_list_item_1,data));
        super.setContentView(listView);
        registerForContextMenu(listView);//
上下文菜
可以和listview融合在一起了
    }
 @Override
 public boolean onContextItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case Menu.FIRST+1:
   Toast.makeText(MainActivity.this, "
选择的是-添加系人", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+2:
   Toast.makeText(MainActivity.this, "
选择的是-", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+3:
   Toast.makeText(MainActivity.this, "
选择的是-除信息", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+4:
   Toast.makeText(MainActivity.this, "
选择的是-另存", Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+5:
   Toast.makeText(MainActivity.this, "
选择的是-编辑", Toast.LENGTH_SHORT).show();
   break;
  default:
   break;
  }
  return super.onContextItemSelected(item);
 }
 @Override
 public void onContextMenuClosed(Menu menu) {
  Toast.makeText(MainActivity.this, "
上下文菜", Toast.LENGTH_SHORT).show();
 }
 @Override
 public void onCreateContextMenu(ContextMenu menu, View v,
   ContextMenuInfo menuInfo) {
  super.onCreateContextMenu(menu, v, menuInfo);
  menu.setHeaderTitle("
信息提示");
  getMenuInflater().inflate(R.menu.mymenu, menu);
   
}

技术分享

三子菜,当系好菜后也可以每一个菜里面定多个子菜

如下

完全是在Activity中完成

package com.qn.m;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
   
 private String data[]=new String[]{"IJRQN","
未来的名字","早会实现","次上天不会了",
   "
我喜
你很久了"};
 private  ListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listView=new ListView(MainActivity.this);
        listView.setAdapter(new ArrayAdapter(MainActivity.this,
          android.R.layout.simple_expandable_list_item_1,data));
        super.setContentView(listView);
        registerForContextMenu(listView);//
上下文菜
可以和listview融合在一起了
    }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  SubMenu fileMenu=menu.addSubMenu("
文件");
  SubMenu editMenu=menu.addSubMenu("
编辑");
  fileMenu.add(Menu.NONE,Menu.FIRST+1,1,"
新建");
  fileMenu.add(Menu.NONE,Menu.FIRST+2,2,"
打开");
  fileMenu.add(Menu.NONE,Menu.FIRST+3,3,"
保存");
  fileMenu.add(Menu.NONE,Menu.FIRST+4,4,"
");
  fileMenu.add(Menu.NONE,Menu.FIRST+5,5,"
恢复");
  return super.onCreateOptionsMenu(menu);
 }
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case Menu.FIRST+1:
   Toast.makeText(MainActivity.this, "
添加
系人",
     Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+2:
   Toast.makeText(MainActivity.this, "
",
     Toast.LENGTH_SHORT).show();
   break;

  case Menu.FIRST+3:
   Toast.makeText(MainActivity.this, "
除信息",
     Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+4:
   Toast.makeText(MainActivity.this, "
另存
",
     Toast.LENGTH_SHORT).show();
   break;
  case Menu.FIRST+5:
  Toast.makeText(MainActivity.this, "
编辑",
    Toast.LENGTH_SHORT).show();
   break;
  }
  return super.onContextItemSelected(item);
  
}

技术分享

四:子菜也可以通配置文件完成

res/menu/filemenu.xmlres/menu/editmenu.xml文件

?xml version="1.0" encoding="utf-8"?>

">
   
    android:id="@+id/item01"
    android:title="
新建"
    /> 
   
    android:id="@+id/item02"
    android:title="
打开"
    /> 
   
    android:id="@+id/item03"
    android:title="
保存"
    /> 

 

?xml version="1.0" encoding="utf-8"?>

">
   
    android:id="@+id/item04"
    android:title="
"
    /> 
   
    android:id="@+id/item05"
    android:title="
恢复"
    /> 

 2.Activity完成代

package com.qn.m;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
   
 private String data[]=new String[]{"IJRQN","
未来的名字","早会实现","次上天不会了",
   "
我喜
你很久了"};
 private  ListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listView=new ListView(MainActivity.this);
        listView.setAdapter(new ArrayAdapter(MainActivity.this,
          android.R.layout.simple_expandable_list_item_1,data));
        super.setContentView(listView);
        registerForContextMenu(listView);//
上下文菜
可以和listview融合在一起了
    }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  SubMenu fileMenu=menu.addSubMenu("
文件");
  SubMenu editMenu=menu.addSubMenu("
编辑");
  getMenuInflater().inflate(R.menu.filemenu, fileMenu);
  getMenuInflater().inflate(R.menu.editmenu, editMenu);
  return super.onCreateOptionsMenu(menu);
 }
}

 技术分享

Android中的菜单

标签:

原文地址:http://blog.csdn.net/chuyuqing/article/details/44461115

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!