1、Android的Menu简介
Android系统的Menu主要有三种:OptionsMenu、ContextMenu、SubMenu
自定义Menu可参考:http://www.cnblogs.com/salam/archive/2011/04/04/2005329.html
2、OptionsMenu用法
2.1、创建Menu
按下Menu键时,屏幕底部就会弹出menu选项,提供选择。创建OptionsMenu的方法是在Activity类中复写onCreateOptionsMenu(),然后通过menu.add()方法添加各种选项,add方法的详细参数和返回值如下 :
Java代码 收藏代码
public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)
groupId,组别,用来划分itemid的。一般为Menu.NONE
itemId,ID。是menu识别编号,供识别menu用的,很重要
order,顺序。这个参数的大小决定菜单选项出现的先后顺序。顺序按照参数由小到大
title,显示文本
返回值为ture时,menu才有效,若是 return false;则menu不能显示,也就是说menu无效。
复写方法onCreateOptionsMenu()时,就有个 return super.onCreateOptionsMenu(menu);,默认就行了。
添加menu选项例子:
menu.add(Menu.NONE,0,0,"添加").setIcon(android.R.drawable.ic_menu_add);
switch (item.getItemId()) {
case 0:
Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(this, "方法还没定义", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
SubMenu submenu=menu.addSubMenu(Menu.NONE, 0, 0, "添加")
.setIcon(android.R.drawable.ic_menu_add);
submenu.add(Menu.NONE, 10, 0, "从网络添加");
submenu.add(Menu.NONE, 11, 1, "从本地添加");
submenu.add()方法不能设置图标,设置了也是无效的;但是submenu本身可以设置图标,submenu.setIcon();
4、ContextMenu用法
this.registerForContextMenu(findViewById(R.id.et));
public class MenuActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.registerForContextMenu(findViewById(R.id.et));
//注册到EditText,et是它的id
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
menu.add(Menu.NONE, 0, 0, "添加");
menu.add(Menu.NONE, 1, 1, "保存");
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 0:
Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(this, "方法还没定义", Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
}
5、自定义菜单
Grid_view_menu.xml代码
<!-- 用于定义自定义Menu的布局 -->
<?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" >
<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代码
<!-- 用于定义Menu单个按钮的样式 -->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns: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:contentDescription="@string/autoMenuIcon"
android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" >
</ImageView>
<TextView
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_image"
android:layout_centerHorizontal="true"
android:text="@string/menuText" >
</TextView>
</RelativeLayout>
//完整代码代码
public class AndroidMenuActivity extends Activity {
/** Called when the activity is first created. */
private boolean isMore = false;// menu菜单翻页控制
View menuView;
GridView menuGrid;
AlertDialog menuDialog;// menu菜单Dialog
private final int ITEM_SEARCH = 0;// 搜索
private final int ITEM_FILE_MANAGER = 1;// 文件管理
private final int ITEM_DOWN_MANAGER = 2;// 下载管理
private final int ITEM_FULLSCREEN = 3;// 全屏
private final int ITEM_MORE = 11;// 菜单
/** 菜单图片 **/
int[] menu_image_array = {
R.drawable.menu_search,
R.drawable.menu_filemanager,
R.drawable.menu_downmanager,
R.drawable.menu_fullscreen,
R.drawable.menu_inputurl,
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_penselectmodel,
R.drawable.menu_page_attr,
R.drawable.menu_novel_mode,
R.drawable.menu_page_updown,
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
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//通过grid_view_menu.xml
menuView = View.inflate(this, R.layout.grid_view_menu, null);
// 创建AlertDialog
menuDialog = new AlertDialog.Builder(this).create();
menuDialog.setView(menuView);
menuDialog.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_MENU)// 监听按键
dialog.dismiss();
return false;
}
});
menuGrid = (GridView) menuView.findViewById(R.id.gridview);
menuGrid.setAdapter(getMenuAdapter(menu_name_array, menu_image_array));
/** 监听menu选项 **/
menuGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
switch (arg2) {
case ITEM_SEARCH:break;
case ITEM_FILE_MANAGER:break;
case ITEM_DOWN_MANAGER:break;
case ITEM_FULLSCREEN:break;
case ITEM_MORE:// 翻页
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(ITEM_MORE);
break;
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add("menu");// 必须创建一项
return super.onCreateOptionsMenu(menu);
}
private SimpleAdapter getMenuAdapter(String[] menuNameArray,
int[] imageResourceArray) {
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < menuNameArray.length; i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("itemImage", imageResourceArray[i]);
map.put("itemText", menuNameArray[i]);
data.add(map);
}
SimpleAdapter simperAdapter = new SimpleAdapter(
this,
data,
R.layout.item_menu,
new String[] {
"itemImage",
"itemText"
},
new int[] {
R.id.item_image,
R.id.item_text
}
);
return simperAdapter;
}
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (menuDialog == null) {
menuDialog = new AlertDialog.Builder(this).setView(menuView).show();
} else {
menuDialog.show();
}
return false;// 返回为true 则显示系统menu
}
}