您的位置:首页 > 其它

Anddroid之Menu用法

2015-07-31 16:32 351 查看
  菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)

  一、概述

  public boolean onCreateOptionsMenu(Menu menu)

  使用此方法调用OptionsMenu

  public boolean onOptionsItemSelected(MenuItem item)

  选中菜单项后发生的动作。

  public void onOptionsMenuClosed(Menu menu)

  菜单关闭后发生的动作。

  public boolean onPrepareOptionsMenu(Menu menu)

选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。

  public boolean onMenuOpened(int featureId, Menu menu)

  单打开后发生的动作。

  二、默认样式

  默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。

/**
* 系统默认的菜单选项
* @author KiWi
*/
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

/**
* 重载onCreateOptionsMenu(Menu menu)方法
* 并在此方法中添加菜单项 最后返回true,如果false,菜单则不会显示。
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {

/**
* add()方法的四个参数,依次是:
* 1、组别,如果不分组的话就写Menu.NONE,
* 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
* 3、顺序,那个菜单现在在前面由这个参数的大小决定
* 4、文本,菜单的显示文本
*/
menu.add(Menu.NONE,Menu.FIRST + 1,5,"删除").setIcon(android.R.drawable.ic_delete);
menu.add(Menu.NONE,Menu.FIRST + 2,2,"保存").setIcon(android.R.drawable.ic_menu_edit);
menu.add(Menu.NONE,Menu.FIRST + 3,6,"帮助").setIcon(android.R.drawable.ic_menu_help);
menu.add(Menu.NONE,Menu.FIRST + 4,1,"添加").setIcon(android.R.drawable.ic_menu_add);
menu.add(Menu.NONE,Menu.FIRST + 5,4,"详细").setIcon(android.R.drawable.ic_menu_info_details);
menu.add(Menu.NONE,Menu.FIRST + 6,3,"发送").setIcon(android.R.drawable.ic_menu_send);

return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch(item.getItemId()){
case Menu.FIRST + 1:
Toast.makeText(this,"删除菜单被点击了",0).show();
break;

case Menu.FIRST + 2:
Toast.makeText(this,"保存菜单被点击了",0).show();
break;

case Menu.FIRST + 3:
Toast.makeText(this,"帮助菜单被点击了",0).show();
break;

case Menu.FIRST + 4:
Toast.makeText(this,"添加菜单被点击了",0).show();
break;

case Menu.FIRST + 5:
Toast.makeText(this,"详细菜单被点击了",0).show();
break;

case Menu.FIRST + 6:
Toast.makeText(this,"发送菜单被点击了",0).show();
break;

default:
break;
}
return false;
}

@Override
public void onOptionsMenuClosed(Menu menu) {
Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();
}
}


效果如图:



、自定义样式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<GridView
android:id="@+id/gv_menu"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:numColumns="4"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>

</LinearLayout>


<?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:id="@+id/item_image"
android:src="@drawable/icon"
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="选项" >
</TextView>

</RelativeLayout>


/**
* 自定义菜单
* @author KiWi
*/
public class CusActivity extends Activity {

private boolean isMore = false; // menu菜单翻页控制
private AlertDialog mDialog; // menu菜单Dialog
private View mView;
private GridView mGv;

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

initView();
}

private void initView() {
mView = View.inflate(this,R.layout.menu_style,null);
mGv = (GridView)mView.findViewById(R.id.gv_menu);

mDialog = new AlertDialog.Builder(this).setView(mView).create();
mDialog.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog,int keyCode,KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
dialog.dismiss();
}
return false;
}
});

mGv.setAdapter(getMenuAdapter(menu_name_array,menu_image_array));

/**
* 监听Menu选项
*/
mGv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
switch(position){
case ITEM_MORE:

if (isMore) {
mGv.setAdapter(getMenuAdapter(menu_name_array2,menu_image_array2));
isMore = false;
}else {
mGv.setAdapter(getMenuAdapter(menu_name_array,menu_image_array));
isMore = true;
}

mGv.invalidate();
mGv.setSelection(ITEM_MORE);

break;

default:
break;
}
}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("menu");// 必须创建一项
return super.onCreateOptionsMenu(menu);
}

/**
* 如果第一次打开则设置视图,否则直接显示menuDialog视图。
*/
@Override
public boolean onMenuOpened(int featureId,Menu menu) {
if (mDialog == null) {
mDialog = new AlertDialog.Builder(this).setView(mView).show();
}else {
mDialog.show();
}
return false; // 返回为true 则显示系统menu
}

/**
* 菜单添加菜单项
*/
private SimpleAdapter getMenuAdapter(String[] menuNames,int[] menuImages) {
ArrayList<HashMap<String,Object>> datas = new ArrayList<HashMap<String,Object>>();
for (int i = 0;i < menuNames.length;i++) {
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("itemImage",menuImages[i]);
map.put("itemName",menuNames[i]);
datas.add(map);
}

SimpleAdapter sa = new SimpleAdapter(this,datas,R.layout.menu_item,new String[]{
"itemImage","itemName"},new int[]{R.id.item_image,R.id.item_text});
return sa;
}
}


结果如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: