2013年(10)
分类: 嵌入式
2013-01-11 19:57:27
v Options menus
v Sub menus 子菜单
v Context menus
v 静态Xml菜单
menu实现的两种方法
menu 的用法.
1. 简单的代码
1. public static final int ITEM_1_ID = Menu.FIRST;
2. public static final int ITEM_2_ID = Menu.FIRST + 1;
3. public static final int ITEM_3_ID = Menu.FIRST + 2;
4.
5. public boolean onCreateOptionsMenu(Menu menu) {
6. super.onCreateOptionsMenu(menu);
7. //不带图标的menu
8. menu.add(0, ITEM_1_ID, 0, "item-1");
9. //带图标的menu
10. menu.add(0, ITEM_2_ID, 1, "item-2").setIcon(R.drawable.editbills2);
11. menu.add(0, ITEM_3_ID, 2, "item-3").setIcon(R.drawable.billsum1);
子菜单:
// SubMenu subMenu = menu.addSubMenu(0, 4, 4, "省份");
// subMenu.add(0, 1, 1, "江苏省");
// subMenu.add(0, 2, 2, "上海市");
12. return true;
13. }
14.
15. public boolean onOptionsItemSelected(MenuItem item){
16. switch (item.getItemId()) {
17. case 1:
18. Toast.makeText(this, "menu1",Toast.LENGTH_SHORT).show();
19. return true;
20. case 2:
21.
22. return true;
23. case 3:
24.
25. return true;
26. }
27. return false;
28. }
第一种方法,通过Layout来添加静态菜单元素。
一般情况下,开发者在res/Layout路径下来定义应用程序的GUI。应用Eclipse创建一个新项目后,可以看到res/layout中存在一个 预置的main.xml文件,其作为程序默认启动界面。同样,可以通过这种方式 创建一个静态的Menu,创建方法参阅下边的源代码:
?View Code XML
version="1.0" encoding="utf-8"?> |
在Activity类中调用刚刚创建的Menu,首先将当前的Activity与指定的Menu XML相关联:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.layout.menu_mainactivity, menu);
return true;
}
实现onOptionsItemSelected方法: (其目的是捕捉到菜单触发事件后,对具体触发的选项作出响应,实际调用的函数包含在各自的case中)
01.@Override
02.public boolean onOptionsItemSelected(MenuItem item) {
03. switch (item.getItemId()) {
04. case R.id.previous:
05. previous(); //go to previous song in
the playlist
06. return true;
07. case R.id.play_pause:
08. isPlaying() ? pause() : play();
//toggle play/pause
09. return true;
10. case R.id.next:
11. next(); //go to next song in the
playlist
12. return true;
13. }
14. return false; //should never happen
15.}
最后可以通过onPrepareOptionMenu方法初始化Menu Items的属性:
01.@Override
02.public boolean onPrepareOptionsMenu(Menu menu) {
03. //set play_pause menu item look
04. if(isPlaying()) {
05. menu
06. .findItem(R.id.play_pause)
07.
.setTitle(R.string.pause)
08.
.setIcon(android.R.drawable.ic_media_pause);
09. } else {
10. menu
11.
.findItem(R.id.play_pause)
12. .setTitle(R.string.play)
13. .setIcon(android.R.drawable.ic_media_play);
14. }
15. return true;
16.}
大部分程序都通过这种方式添加Menu菜单功能,而且通过以上的步骤来看,其实现方法非常简单。
————
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.btn);
registerForContextMenu(btn);// 注册contextmeun;
}
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo
menuInfo)
{
menu.setHeaderTitle("");
menu.add(0, 1, 1, "复制");
menu.add(0, 2, 2, "剪切");
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
这两种不同的方法实现的目的是一样的,而且不存在本质上的却别,具体根据实际情况(根据项目的结构需要或者团队开发标准)选择合适的方法来创建Menu。