Android(安卓)系统菜单与自定义菜单
16lz
2021-12-04
Android 系统菜单与自定义菜单实现方法如下:
系统菜单显示DefaultMenu.java
- packagecom.wxz.menu;
- importcom.wxz.menu.R;
- importandroid.app.Activity;
- importandroid.content.Intent;
- importandroid.os.Bundle;
- importandroid.view.Menu;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.widget.Button;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- publicclassDefaultMenuextendsActivity{
- privateButtonbtnCustomizeMenu;
- privateTextViewtvTip;
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- this.setTitle("Android系统菜单");
- btnCustomizeMenu=(Button)findViewById(R.id.btnCustomizeMenu);
- btnCustomizeMenu.setOnClickListener(newClickEvent());
- tvTip=(TextView)findViewById(R.id.tvTip);
- tvTip.setText("请按Menu键(F2)显示系统菜单");
- }
- classClickEventimplementsView.OnClickListener{
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- if(v==btnCustomizeMenu){
- Intentit=newIntent();
- it.setClass(DefaultMenu.this,CustomizeMenu.class);
- startActivity(it);
- }
- }
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- /*
- *
- *add()方法的四个参数,依次是:
- *
- *1、组别,如果不分组的话就写Menu.NONE,
- *
- *2、Id,这个很重要,Android根据这个Id来确定不同的菜单
- *
- *3、顺序,那个菜单现在在前面由这个参数的大小决定
- *
- *4、文本,菜单的显示文本
- */
- menu.add(Menu.NONE,Menu.FIRST+1,2,"删除").setIcon(
- android.R.drawable.ic_menu_delete);
- //setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,以
- //android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
- menu.add(Menu.NONE,Menu.FIRST+2,3,"保存").setIcon(
- android.R.drawable.ic_menu_edit);
- menu.add(Menu.NONE,Menu.FIRST+3,4,"帮助").setIcon(
- android.R.drawable.ic_menu_help);
- menu.add(Menu.NONE,Menu.FIRST+4,1,"添加").setIcon(
- android.R.drawable.ic_menu_add);
- //返回true则显示,返回false则不显示
- returntrue;
- }
- @Override
- publicbooleanonOptionsItemSelected(MenuItemitem){
- switch(item.getItemId()){
- caseMenu.FIRST+1:
- Toast.makeText(this,"删除菜单被点击了",Toast.LENGTH_LONG).show();
- break;
- caseMenu.FIRST+2:
- Toast.makeText(this,"保存菜单被点击了",Toast.LENGTH_LONG).show();
- break;
- caseMenu.FIRST+3:
- Toast.makeText(this,"帮助菜单被点击了",Toast.LENGTH_LONG).show();
- break;
- caseMenu.FIRST+4:
- Toast.makeText(this,"添加菜单被点击了",Toast.LENGTH_LONG).show();
- break;
- }
- //返回false则正常显示,返回true则被消费掉
- returnfalse;
- }
- @Override
- publicvoidonOptionsMenuClosed(Menumenu){
- Toast.makeText(this,"选项菜单关闭了",Toast.LENGTH_LONG).show();
- }
- @Override
- publicbooleanonPrepareOptionsMenu(Menumenu){
- Toast.makeText(this,
- "选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单",
- Toast.LENGTH_LONG).show();
- //如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用
- returntrue;
- }
- }
自定义菜单显示CustomizeMenu.java
[java] view plain copy- packagecom.wxz.menu;
- importjava.util.ArrayList;
- importjava.util.HashMap;
- importcom.wxz.menu.R;
- importandroid.app.Activity;
- importandroid.app.AlertDialog;
- importandroid.content.Context;
- importandroid.content.DialogInterface;
- importandroid.content.Intent;
- importandroid.content.DialogInterface.OnKeyListener;
- importandroid.os.Bundle;
- importandroid.view.KeyEvent;
- importandroid.view.Menu;
- importandroid.view.View;
- importandroid.widget.AdapterView;
- importandroid.widget.Button;
- importandroid.widget.GridView;
- importandroid.widget.SimpleAdapter;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- importandroid.widget.AdapterView.OnItemClickListener;
- publicclassCustomizeMenuextendsActivity{
- privateButtonbtnCustomizeMenu;
- privateButtonbtnDefaultMenu;
- privateTextViewtvTip;
- privateContextmContext;
- privatebooleanisMore=true;//menu菜单翻页控制
- AlertDialogmenuDialog;//menu菜单Dialog
- GridViewmenuGrid;
- ViewmenuView;
- //菜单图片
- int[]menu_image_array={R.drawable.menu_search,
- R.drawable.menu_bookmark,R.drawable.menu_bookmark_sync_import,
- R.drawable.menu_sharepage,R.drawable.menu_quit,
- R.drawable.menu_nightmode,R.drawable.menu_refresh,
- R.drawable.menu_more};
- //菜单文字
- String[]menu_name_array={"搜索","书签","加入书签","分享页面","退出","夜间模式",
- "刷新","更多"};
- //菜单图片2
- int[]menu_image_array2={R.drawable.menu_auto_landscape,
- R.drawable.menu_checkupdate,R.drawable.menu_checknet,
- R.drawable.menu_refreshtimer,R.drawable.menu_syssettings,
- R.drawable.menu_help,R.drawable.menu_about,R.drawable.menu_return};
- //菜单文字2
- String[]menu_name_array2={"自动横屏","检查更新","检查网络","定时刷新","设置","帮助",
- "关于","返回"};
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- //TODOAuto-generatedmethodstub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mContext=CustomizeMenu.this;
- this.setTitle("Android自定义菜单");
- btnCustomizeMenu=(Button)findViewById(R.id.btnCustomizeMenu);
- btnCustomizeMenu.setVisibility(View.GONE);
- btnDefaultMenu=(Button)findViewById(R.id.btnDefaultMenu);
- btnDefaultMenu.setVisibility(View.VISIBLE);
- btnDefaultMenu.setOnClickListener(newClickEvent());
- tvTip=(TextView)findViewById(R.id.tvTip);
- tvTip.setText("请按Menu键(F2)显示自定义菜单");
- menuView=View.inflate(this,R.layout.gridview_menu,null);
- //创建AlertDialog
- menuDialog=newAlertDialog.Builder(this).create();
- menuDialog.setView(menuView);
- menuDialog.setOnKeyListener(newOnKeyListener(){
- publicbooleanonKey(DialogInterfacedialog,intkeyCode,
- KeyEventevent){
- if(keyCode==KeyEvent.KEYCODE_MENU)//监听按键
- dialog.dismiss();
- returnfalse;
- }
- });
- menuGrid=(GridView)menuView.findViewById(R.id.gridview);
- menuGrid.setAdapter(getMenuAdapter(menu_name_array,menu_image_array));
- /**监听menu选项**/
- menuGrid.setOnItemClickListener(newOnItemClickListener(){
- publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,
- longarg3){
- switch(arg2){
- case0://搜索,自动横屏
- if(isMore)
- Toast.makeText(mContext,"点击了搜索",Toast.LENGTH_SHORT).show();
- else
- Toast.makeText(mContext,"点击了自动横屏",Toast.LENGTH_SHORT).show();
- break;
- case1://书签,检查更新
- if(isMore)
- Toast.makeText(mContext,"点击了书签",Toast.LENGTH_SHORT).show();
- else
- Toast.makeText(mContext,"点击了检查更新",Toast.LENGTH_SHORT).show();
- break;
- case2://加入书签,检查网络
- if(isMore)
- Toast.makeText(mContext,"点击了加入书签",Toast.LENGTH_SHORT).show();
- else
- Toast.makeText(mContext,"点击了检查网络",Toast.LENGTH_SHORT).show();
- break;
- case3://分享页面,定时刷新
- if(isMore)
- Toast.makeText(mContext,"点击了分享页面",Toast.LENGTH_SHORT).show();
- else
- Toast.makeText(mContext,"点击了定时刷新",Toast.LENGTH_SHORT).show();
- break;
- case7://更多
- if(isMore){
- menuGrid.setAdapter(getMenuAdapter(menu_name_array2,
- menu_image_array2));
- isMore=false;
- }else{//首页
- menuGrid.setAdapter(getMenuAdapter(menu_name_array,
- menu_image_array));
- isMore=true;
- }
- menuGrid.invalidate();//更新menu
- menuGrid.setSelection(7);
- break;
- default://退出,夜间模式,刷新,设置,帮助,关于
- Toast.makeText(mContext,"点击了其它菜单项",Toast.LENGTH_SHORT).show();
- break;
- }
- }
- });
- }
- classClickEventimplementsView.OnClickListener{
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- if(v==btnDefaultMenu){
- Intentit=newIntent();
- it.setClass(CustomizeMenu.this,DefaultMenu.class);
- startActivity(it);
- }
- }
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- menu.add("menu");//必须创建一项
- returnsuper.onCreateOptionsMenu(menu);
- }
- privateSimpleAdaptergetMenuAdapter(String[]menuNameArray,
- int[]imageResourceArray){
- ArrayList<HashMap<String,Object>>data=newArrayList<HashMap<String,Object>>();
- for(inti=0;i<menuNameArray.length;i++){
- HashMap<String,Object>map=newHashMap<String,Object>();
- map.put("itemImage",imageResourceArray[i]);
- map.put("itemText",menuNameArray[i]);
- data.add(map);
- }
- SimpleAdaptersimperAdapter=newSimpleAdapter(this,data,
- R.layout.item_menu,newString[]{"itemImage","itemText"},
- newint[]{R.id.item_image,R.id.item_text});
- returnsimperAdapter;
- }
- @Override
- publicbooleanonMenuOpened(intfeatureId,Menumenu){
- if(menuDialog==null){
- menuDialog=newAlertDialog.Builder(this).setView(menuView).show();
- }else{
- menuDialog.show();
- }
- returnfalse;//返回为true则显示系统menu
- }
- }
主配置文件main.xml
[html] view plain copy- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="请点击Menu键(F2)显示选项菜单"
- android:id="@+id/tvTip"/>
- <Button
- android:id="@+id/btnCustomizeMenu"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="自定义菜单"/>
- <Button
- android:id="@+id/btnDefaultMenu"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:visibility="gone"
- android:text="系统菜单"/>
- </LinearLayout>
菜单布局表格配置文件gridview_menu.xml
[html] view plain copy- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <GridView
- android:id="@+id/gridview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:numColumns="4"
- android:verticalSpacing="10dip"
- android:horizontalSpacing="10dip"
- android:stretchMode="columnWidth"
- android:gravity="center"
- />
- </LinearLayout>
菜单项配置文件item_menu.xml
[html] view plain copy- <?xmlversion="1.0"encoding="utf-8"?>
- <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/RelativeLayout_Item"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingBottom="5dip">
- <ImageView
- android:id="@+id/item_image"
- android:layout_centerHorizontal="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </ImageView>
- <TextView
- android:layout_below="@id/item_image"
- android:id="@+id/item_text"
- android:layout_centerHorizontal="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="选项">
- </TextView>
- </RelativeLayout>
开发环境:XP3+Eclipse+Android2.2+JDK6.0
测试环境:Android2.2模拟器
更多相关文章
- android 一直在最前面的浮动窗口效果
- 接收短信启动相应服务
- ImageView.setScalType参数详解
- Android软键盘使用
- 介绍一个Android开源项目:GifView——Android显示GIF动画
- GridView做所有程序主菜单
- android 点击返回键退出程序的方法
- Android(安卓)SDK 自带项目GestureBuilderActivity
- android Gallery(画廊)以及BaseAdapter