Android菜单功能的实现
来源:互联网 发布:斗鱼人气软件 2016 编辑:程序博客网 时间:2024/06/05 14:46
android提供了三种菜单类型,分别为:
1) options menu
2) context menu
3) sub menu
options menu就是通过按home键来显示,context menu需要在view上按上2s后显示。这两种menu都有可以加入子菜单,子菜单不能种不能嵌套子菜单。
options menu最多只能在屏幕最下面显示6个菜单选项,成为icon menu,icon menu不能有checkable选项。多余6的会以more icon menu来调出,成为expanded menu。options menu通过activity的onCreateOptionsMenu来生成,这个函数只会在menu第一次生成时调用。任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。onOptionsItemSelected 处理选中的菜单项。
context menu是跟某个具体的view绑定在一起,在activity种用registerForContextMenu来为某个view注册context menu。context menu在显示前都会调用onCreateContextMenu来生成menu。onContextItemSelected选中的菜单项。
android还提供了对菜单项进行分组的功能,可以把相似功能的菜单项分成同一个组,这样就可以通过调用setGroupCheckable,setGroupEnabled,setGroupVisible来设置菜单属性,而无须单独设置。
1、利用xml定义选项菜单
options menu通过activity的onCreateOptionsMenu来生成
这个函数只会在menu第一次生成时调用。
任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。
onOptionsItemSelected 用来处理选中的菜单项。
2、响应菜单项单击事件
3种方式
onMenuItemSelected
onOptionsltem Selected
onMenuItemClick
3、动态添加、修改和删除菜单项
菜单项的增删改查
增:add, addSubMenu
删:removeItem,removeGroup
选项菜单:onPrepareOptionsMenu()——> MenuItem->setXXX()
上下文菜单:onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {} 方法在每次调用上下文菜单时都会被调用一次
4、子菜单的创建
l Xml创建
l 动态创建
SubMenu subMenu=menu.addSubMenu(1, SUBMENU, 1, "子菜单");
subMenu.add(20, SUBITEM1,1,"subitem1");
subMenu.add(20, SUBITEM2,2,"subitem2");
subMenu.add(30, SUBITEM3,3,"subitem3");
或:
inflater.inflate(R.menu.sub_menu, menu);
5、带单选或复选的子菜单
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater=this.getMenuInflater();
inflater.inflate(R.menu.sub_menu, menu);
SubMenu subMenu=menu.addSubMenu(1, SUBMENU, 1, "子菜单");
subMenu.add(20, SUBITEM1,1,"subitem1");
subMenu.add(20, SUBITEM2,2,"subitem2");
subMenu.add(30, SUBITEM3,3,"subitem3");
subMenu.setGroupCheckable(20, true, true);//单选框
//subMenu.getItem().setCheckable(true);//复选框
MenuItem item=subMenu.getItem(0);//设置默认选项的第几个
//item.setCheckable(true);//设置默认选项
item.setChecked(true);
return true;
}
6、上下文子菜单
public class MenuTestActivity4 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv=(TextView)this.findViewById(R.id.textView);
this.registerForContextMenu(tv);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.subitem1:
Toast.makeText(this, "subitem1", Toast.LENGTH_LONG).show();
break;
case R.id.subitem2:
break;
}
return super.onContextItemSelected(item);
}
int i=1;
//每次上下文菜单第一次显示都会调用
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater=this.getMenuInflater();
inflater.inflate(R.menu.sub_menu,menu);
i++;
menu.getItem(0).setTitle("x"+i);
super.onCreateContextMenu(menu, v, menuInfo);
}
}
7、利用今天所学知识实现android系统中通讯录界面中所用到的菜单
MenuMyTestActivity.java
public class MenuMyTestActivity extends Activity {
private static final int DELETE=1;
private static final int EXIT=2;
private static final int SUBMENU=10;
private static final int SUBITEM1=SUBMENU+1;
private static final int SUBITEM2=SUBMENU+2;
private static final int SUBITEM3=SUBMENU+3;
Menu menu=null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv=(TextView)this.findViewById(R.id.textView);
this.registerForContextMenu(tv);
}
public boolean onCreateOptionsMenu(Menu menu){
menu.add(1, DELETE, 2, "删除保存");
menu.add(1, EXIT , 3, "退出");
this.menu=menu;
SubMenu subMenu=menu.addSubMenu(1, SUBMENU, 1, "新建联系人");
subMenu.add(20, SUBITEM1,1,"手机");
subMenu.add(20, SUBITEM2,2,"电话");
subMenu.add(30, SUBITEM3,3,"生日提醒");
menu.findItem(SUBMENU).setIcon(R.drawable.ic_launcher);
menu.findItem(DELETE).setIcon(R.drawable.ic_launcher);
menu.findItem(EXIT).setIcon(R.drawable.ic_launcher);
subMenu.setGroupCheckable(20, true, true);
subMenu.findItem(SUBITEM3).setCheckable(true);
MenuItem item=subMenu.getItem(0);
item.setCheckable(true);//可选或互斥
item.setChecked(true);//选中状态
return true;
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.subitem1:
Toast.makeText(this, "添加到群组", Toast.LENGTH_LONG).show();
break;
case R.id.subitem2:
Toast.makeText(this, "编辑联系人", Toast.LENGTH_LONG).show();
break;
}
return super.onContextItemSelected(item);
}
//每次上下文菜单第一次显示都会调用
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater=this.getMenuInflater();
inflater.inflate(R.menu.sub_menu,menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
int i=1;
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case DELETE:
menu.removeGroup(1);
break;
case EXIT:
this.finish();
break;
case SUBITEM1:
break;
case SUBITEM2:
break;
case SUBITEM3:
this.finish();
break;
}
return true;
}
}
Main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
Options_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/newFile"
android:icon="@drawable/ic_launcher"
android:title="@string/newFile_title"
/>
<item android:id="@+id/exit"
android:icon="@drawable/ic_launcher"
android:title="@string/exit_title"
/>
</menu>
Sub_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menuitem1"
android:title="menuitem1"
/>
<item android:id="@+id/menuitem2"
android:title="menuitem2" >
<menu>
<item android:id="@+id/subitem1"
android:title="subitem1"
/>
<item android:id="@+id/subitem2"
android:title="subitem2"
/>
</menu>
</item>
</menu>
MenuMyTest Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.class3g.activity"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".MenuMyTestActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
显示结果图:
点住“欢迎来到我的android世界!”弹出下图
点击menuitem2出现下图:
点击subitem1出现下图:
单击手机上的menu按钮,出现下图:
单击“新建联系人”图标,出现下图:
- Android菜单功能的实现
- 【Android】菜单功能的实现:上下文菜单
- 【Android】菜单功能的实现:使用XML
- 【Android】菜单功能的实现:弹出Popup菜单 以及小结
- 【Android】菜单功能的实现:使用Java代码
- 【Android】菜单功能的实现:上下文action mode
- 功能菜单的实现代码
- Android使用Popupwindow实现悬浮菜单功能
- Android-实现类似3DTouch菜单功能
- android菜单的实现
- MFC-实现菜单部分功能的实现
- 实现菜单“最近文件”的功能
- 菜单功能的两种实现方法
- 用jquery实现菜单的伸缩 功能
- TreeList控件右键菜单功能的实现
- 侧滑菜单的功能实现
- mui侧滑菜单的功能实现
- 虚幻4游戏菜单功能的实现
- Entity Framework 全面教程详解(转)
- 怎样才能开发出好的软件(五)
- 安卓第六天————通讯录的简单实现源码
- Hibernate常见的集合映射主要有Set,List,Array,Map,Bag
- Android之菜单总结
- Android菜单功能的实现
- thinkphp自定义标签,view直接标签连接数据
- win7查看.hlp帮助文件办法(安装KB917607补丁包)
- 利用BLCR加快android的启动过程
- 浅谈HTML
- MFC程序的消息处理顺序
- android设置背景色为透明
- Android菜单(Menu)
- C++ STL Vector