计算机应用112班 孔秋静
菜单设计
android中的菜单有两种:一种是通过MENU键激活,叫Options Menu;另一种是当用户长按一个元素时激活,叫Context Menu。
当用户长按一个控件时,可以弹出相应的菜单。
(1)Options Menu
Options Menu 用于当前的Activity,它包括两种菜单项;
icon menu:options menu在屏幕底部最多只能显示6个菜单项,这些菜单项为icon menu ,icon menu只支持文字(title)以及icon,可以设置快捷键,不支持checkbox以及radio控件,所以本能设置checkable选项。
(2)Context Menu
Context Menu用于view,跟某个具体的view绑定在一起,该类型的菜单不支持icon和快捷键。
(3)以下代码实现了相应的功能:
package com.cqvie;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MenuActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
EditText t2=(EditText) findViewById(R.id.t2);
this.registerForContextMenu(t2);
Button b1=(Button) findViewById(R.id.b1);
this.registerForContextMenu(b1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
// 一个menu可以包括多个子菜单
SubMenu subMenu = menu.addSubMenu("系统设置");
subMenu.add(1, 1, 1, "显示设置");
subMenu.add(1, 2, 2, "网络设置");
subMenu.add(1, 3, 3, "高级设置");
subMenu.add(1, 4, 4, "安全设置");
SubMenu subMenu2 = menu.addSubMenu("文件");
subMenu2.add(1, 1, 1, "打开");
subMenu2.add(1, 2, 2, "保存");
subMenu2.add(1, 3, 3, "另存为");
return true;
}
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
// int id=item.getItemId();
// TextView t1=(TextView) findViewById(R.id.t1);
// t1.setText(id+"");
// return super.onOptionsItemSelected(item);
// }
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
// ContextMenu 上下文菜单
// TODO Auto-generated method stub
// super.onCreateContextMenu(menu, v, menuInfo);
// Log.v(TAG, "populate context menu");
// set context menu title menu.clear();
//清空原有菜单项
if(v.getId()==R.id.t2) {
menu.setHeaderTitle("文件操作");
menu.add(0, 1, Menu.NONE, "发送");
menu.add(0, 2, Menu.NONE, "标记为重要");
menu.add(0, 3, Menu.NONE, "重命名");
menu.add(0, 4, Menu.NONE, "删除");
}
else if(v.getId()==R.id.b1) {
menu.setHeaderTitle("文件");
menu.add(0, 1, Menu.NONE, "aaa");
menu.add(0, 2, Menu.NONE, "bbb");
menu.add(0, 3, Menu.NONE, "ccc");
menu.add(0, 4, Menu.NONE, "ddd");
}
}
}
以上代码最开始的效果如下:
当用户长按文本框控件时,实现的效果如下:
当用户长按按钮控件时,实现的效果如下:
当用户按MENU控件时,实现的效果如下:
当用户点系统用户时,实现的效果如下:
当用户点文件时,实现的效果如下:
(4) 总结
在整个菜单设计制作中
我了解到了Options Menu在Activity里面,一般是通过以下方法使用Options Menu:
- onCreateOptionsMenu(Menu menu)创建Options Menu,这个方法只会在menu第一次显示时调用;
- onCreateOptionsMenu (Menu menu)更新改变Options Menu的内容,这个方法会在menu每次显示是调用;
- onCreateOptionsMenu(MenuItem menu)处理选中的菜单项。
同时我了解到了Context Menu在Activity里面,一般是通过以下方法使用Context Menu:
- registerForContextMenu(View view)为某个view注册Context Menu,一般在Activity的onCreate里面调用;
- onCreateContextMenu(ContextMenu menu,View v,ContextMenu.Context MenuInfo menuInfo)创建context menu和Options Menu不同,context meun每次显示时都会调用这个方法。
- onContextItemSelected(MenuItem item)处理选中的菜单项 。
以上两种Menu都可以加入子菜单,但子菜单不能嵌套子菜单,这意味着在Android系统中菜单只有两层,同时子菜单不支持icon。