您的位置:首页 > 其它

Menu的三个实现方式

2015-06-17 20:31 295 查看

1:菜单的设计在人机交互中是非常人性化的,它提供了不同功能分组展示的能力。Android平台提供了3种菜单的实现方式,即选项菜单(OptionMenu)、上下文菜单(ContextMenu)、子菜单(SubMenu).

2:创建一个菜单的步骤: 设置菜单-----》得到菜单-----》监听菜单
(1):重写onCreateOptionsMenu或者onCreateContextMenu。
(2):调用Menu的add方法添加菜单项(MenuItem),可以调用MneuItem的setIcon方法来为菜单设置图标。

(3):当菜单项(Menuitem)被选择时,重写Activity的onOptionsItemSelected()
方法来响应事件。

java代码:
@Override

public boolean onCreateOptionsMenu(Menu menu){

//调用基类的方法,以便调出系统菜单(如果有的话)

super.onCreateOptionsMenu(menu);
//添加菜单

menu.add(0,1,0,“重新开始”).setIcon(R.drawable.reflash);

menu.add(0,2,0,"游戏指南").setIcon(R.drawable.help);

menu.add(0,3,0,"关于游戏").setIcon(R.drawable.info);

menu.add(0,4,0,"不想玩了").setIcon(R.drawable.exit);

//返回值为“true”,表示菜单可见,即显示菜单

return true;

}

看一看menu.add方法的参数:

第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。

第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。

第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。

第四个String类型的title参数,表示选项中显示的文字。

1 Option Menu

这种应该是最常见的,一般手机上都会提供Menu的按钮,对应的就是这个菜单弹出。

主要步骤就是复写Activity父类中的onCreateOptionMenu(Menu menu)方法,然后通过Menu的add方法来添加菜单进去。

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

<LinearLayout xmlns: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="fill_parent"

android:layout_height="wrap_content"

android:text="测试选项菜单"/>

</LinearLayout>

public class MenuDemo extends Activity {

private static final int ITEM1 = Menu.FIRST;

private static final int ITEM2 = Menu.FIRST+1;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.menutest);

}

/**

* 覆盖该方法添加菜单项

*/

@Override

public boolean onCreateOptionsMenu(Menu menu) {

menu.add(0, 1, 0, "开始游戏");

menu.add(0, 2, 0, "暂停游戏");

menu.add(0, 3, 0, "退出游戏");

return true;

}

// public boolean onCreateOptionsMenu(Menu menu) {

// menu.add(0, 1, 0, "开始").setIcon(R.drawable.earth_01);

// menu.add(0, 2, 0, "暂停").setIcon(R.drawable.earth_02);

// menu.add(0, 3, 0, "退出").setIcon(R.drawable.earth_03);

// return true;

// }

/**

* 覆盖该方法,响应菜单选项被单击事件

*/

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case 1:

setTitle("开始游戏!");//设置标题;可以通过Intent跳转到相关页面

Toast.makeText(MenuDemo.this, "开始游戏!", Toast.LENGTH_LONG).show();

break;

case 2:

setTitle("暂停游戏");

Toast.makeText(MenuDemo.this, "暂停游戏!", Toast.LENGTH_LONG).show();

break;

case 3:

setTitle("退出游戏");

Toast.makeText(MenuDemo.this, "推出游戏!", Toast.LENGTH_LONG).show();

}

return true;

}

}

2.Context Menu

当用户长时间按键不放,弹出的菜单称为上下文菜单。我们经常在windows中用鼠标右键单击弹出的菜单就是上下文菜单。

创建上下文ContextMenu菜单的步骤:
1、 覆盖Activity的onCreateContextMenu()方法,
2、 调用Menu的add方法添加菜单项
3、 覆盖onContexItemSelected()方法,响应菜单单击事件
4、 调用registerForContextMenu(View v)方法为视图注册上下文菜单,v代表某一view
public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)

参数说明:

menu:需要显示的快捷菜单

v:V是用户选择的界面元素

menuInfo:menuInfo是所选择界面元素的额外信息

说明:这个onCreateContextMenu与onCreateOptionsMenu函数不一样,onCreateOptionsMenu函数仅在选项菜单第一次启动时被调用一次,而onCreateContextMenu函数在每次启动都将会被调用一次。

当菜单项(Menuitem)被选择时,重写Activity的onOptionsItemSelected()

方法来响应事件。

public boolean onContextItemSelected (MenuItem item)

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView

android:id="@+id/TextView01"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="测试上下文菜单(改变文字背景色)">

</TextView>

</LinearLayout>

public class MenuDemo2 extends Activity {

private TextView myTV;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.menutest2);

myTV = (TextView)findViewById(R.id.TextView01);

registerForContextMenu(myTV);

}

@Override

public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {

menu.add(0, 1, 0, "红色背景");

menu.add(0, 2, 0, "绿色背景");

menu.add(0, 3, 0, "白色背景");

}

@Override

public boolean onContextItemSelected(MenuItem item) {

switch (item.getItemId()) {

case 1:

myTV.setBackgroundColor(Color.RED);

break;

case 2:

myTV.setBackgroundColor(Color.GREEN);

break;

case 3:

myTV.setBackgroundColor(Color.WHITE);

break;

}

return true;

}

}

3 SubMenu :

子菜单就是将相同功能的分组进行多级显示的一种菜单。就是菜单下面还有菜单。

实际上就是把以上两种结合到一起。

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

<LinearLayout xmlns: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="fill_parent"

android:layout_height="wrap_content"

android:text="测试子菜单"/>

</LinearLayout>

public class MenuDemo3 extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.menutest3);

}

/**

* 覆盖该方法添加子菜单项

*/

public boolean onCreateOptionsMenu(Menu menu) {

//为当前“文件”菜单添加子菜单file

SubMenu file = menu.addSubMenu("文件");

SubMenu edit = menu.addSubMenu("編輯");

SubMenu del = menu.addSubMenu("删除");

file.add(0, 1, 0, "新建");

file.add(0, 2, 0, "打开");

edit.add(1,3,0,"修改名称");

edit.add(1,4,0,"修改密码");

edit.add(1,5,0,"修改性别");

return true;

}

/**

* 覆盖该方法,响应菜单选项被单击事件

*/

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case 1:

setTitle("新建文件!");//改变标题,也可以通过Intent跳转到新建页面

break;

case 2:

setTitle("打开文件!");

break;

}

return true;

}

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