关于Menu的两种设置方法
来源:互联网 发布:wifi丢包率测试软件 编辑:程序博客网 时间:2024/04/30 00:40
大 部分的应用程序都包括两种人机互动方式,一种是直接通过GUI的Views,其可以满足大部分的交互操作。另外一种是应用Menu,当按下Menu按钮后,会弹出与当前活动状态下的应用程序相匹配的菜单。
这两种方式相比较都有各自的优势,而且可以很好的相辅相成,即便用户可以由主界面完成大部分操作,但是适当的拓展Menu功能可以更加完善应用程序,至少用户可以通过排列整齐的按钮清晰的了解当前模式下可以使用的功能。
有两种方法可以为Android APPs添加菜单功能,下边将对设置过程给出详细的介绍:
第一种方法,通过Layout来添加静态菜单元素。
一般情况下,开发者在res/Layout路径下来定义应用程序的GUI。应用Eclipse创建一个新项目后,可以看到res/layout中存在一个预置的main.xml文件,其作为程序默认启动界面。同样,可以通过这种方式创建一个静态的Menu,创建方法参阅下边的源代码:
在Activity类中调用刚刚创建的Menu,首先将当前的Activity与指定的Menu XML相关联:
1
@Override
2
public
boolean
onCreateOptionsMenu(Menu menu) {
3
super
.onCreateOptionsMenu(menu);
4
getMenuInflater().inflate(R.layout.player_menu, menu);
5
return
true
;
6
}
实现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菜单功能,而且通过以上的步骤来看,其实现方法非常简单。
第二种方法,在Activity类中动态创建Menu。
首先需要定义Menu Item识别序号:
1
public
static
final
MENU_PREVIOUS =
0
;
//no more R.ids
2
public
static
final
MENU_PLAY_PAUSE =
1
;
3
public
static
final
MENU_NEXT =
2
;
实现onCreateOptionMenu()方法:(第一种方法中已经通过xml定义了现成的Menu结构,所以不需要应用这个方法)
01
@Override
02
public
boolean
onCreateOptionsMenu(Menu menu) {
03
menu
04
.add(
0
, MENU_PREVIOUS,
0
, R.string.previous)
05
.setIcon(android.R.drawable.ic_media_previous);
06
menu
07
.add(
0
, MENU_PLAY_PAUSE,
0
, R.string.play)
08
.setIcon (android.R.drawable.ic_media_play);
09
menu
10
.add(
0
, MENU_NEXT,
0
, R.string.next)
11
.setIcon(android.R.drawable.ic_media_next);
12
return
true
;
13
}
引用与第一种方法相同的方式来捕捉菜单的行为:
01
@Override
02
public
boolean
onOptionsItemSelected(MenuItem item) {
03
switch
(item.getItemId()) {
04
case
MENU_PREVIOUS:
05
previous();
//go to previous song in the playlist
06
return
true
;
07
case
MENU_PLAY_PAUSE:
08
isPlaying() ? pause() : play();
//toggle play/pause
09
return
true
;
10
case
MENU_NEXT:
11
next();
//go to next song in the playlist
12
return
true
;
13
}
14
return
false
;
//should never happen
15
}
————
对以上两种方法的补充:
根据需要设置不同Menu Item的属性:
1
menu.findItem(R.id.next).setEnabled(
false
);
设置Menu Item从属关系(添加子父级别):
直接写在方法中:
1
menu
2
.addSubMenu(R.id.repeat)
3
.add(R.id.one)
4
.add(R.id.all)
5
.add(R.id.none);
直接定义在XML Layout中:
————
这两种不同的方法实现的目的是一样的,而且不存在本质上的却别,具体根据实际情况(根据项目的结构需要或者团队开发标准)选择合适的方法来创建Menu。
查看原文 androidSnippets.org
- 关于Menu的两种设置方法
- android menu的两种实现方法
- Android的Menu状态动态设置方法onPrepareOptionsMenu(Menu menu)
- Android的Menu状态动态设置方法onPrepareOptionsMenu(Menu menu)
- 添加menu的item的两种方法
- 关于Android中设置全屏的两种方法
- anroid下menu的两种创建方法
- 两种自定义的Menu
- android 调用 Menu 两种方法
- android 调用 Menu 两种方法
- Android 两种自定义的Menu
- android中捕捉menu按键的点击事件的两种方法
- 关于Java两种同步方法的理解(代码块级同步对象设置)
- 设置桌面墙纸的两种方法
- 设置Debug的两种方法
- 两种设置环境变量 PATH 的方法
- Android两种设置全屏的方法
- Android的语言设置两种方法
- 实施顾问集中培训观察(3)-客户要其它客户的数据,实施顾问怎么办?
- 利用花生壳内网建站的问题
- Test1pass Apple 9L0-401 free braindumps
- Creating a Simple BSP Application Using AJAX
- 回调函数以及钩子函数的概念
- 关于Menu的两种设置方法
- Source Insight 经典教程
- 转载
- Flash知识点总结
- ognl的in
- freemarker获取request,session等
- RIFF文件规范
- 如何抓取平行集合
- {竞拍} A5从1.21转战HS2