`

android2.2资源文件详解4--menu文件夹下的菜单定义

 
阅读更多

四.menu下定义菜单

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

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@[+][package:]id/resource_name"
          android:title="string"
          android:titleCondensed="string"
          android:icon="@[package:]drawable/drawable_resource_name"
          android:onClick="method name"
          android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
          android:actionLayout="@[package:]layout/layout_resource_name"
          android:actionViewClass="class name"
          android:actionProviderClass="class name"
          android:alphabeticShortcut="string"
          android:numericShortcut="string"
          android:checkable=["true" | "false"]
          android:visible=["true" | "false"]
          android:enabled=["true" | "false"]
          android:menuCategory=["container" | "system" | "secondary" | "alternative"]
          android:orderInCategory="integer" />
    <group android:id="@[+][package:]id/resource name"
           android:checkableBehavior=["none" | "all" | "single"]
           android:visible=["true" | "false"]
           android:enabled=["true" | "false"]
           android:menuCategory=["container" | "system" | "secondary" | "alternative"]
           android:orderInCategory="integer" >
        <item />
    </group>
    <item >
        <menu>
          <item />
        </menu>
    </item>
</menu>

属性:menu:根属性,包含item和group

       item:必须是menu或者group的子元素,可以包含menu(子菜单)

       group:必须是menu的子元素,包含item

属性详解:

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

item:

 

<item
        android:id="@+id/item1"
        android:alphabeticShortcut="m"
        android:checkable=""是否能被选中
        android:checked=""是否是默认选中的
        android:enabled=""是否可用
        android:icon=""图标
        android:menuCategory="container"菜单分类
        android:numericShortcut=""数字快捷键
        android:orderInCategory=""在分类中顺序
        android:title="root(m)"标题
        android:titleCondensed="mm"简化标题
        android:visible=""/>是否可见

 

 说明:其中menuCategory分为:

container For groups that are part of a container.

system For groups that are provided by the system.

secondary For groups that are user-supplied secondary (infrequently used) options.

alternative For groups that are alternative actions on the data that is currently displayed.

 

group:android:checkableBehavior子类项的选择方式

none Not checkable

all All items can be checked (use checkboxes)

single Only one item can be checked (use radio buttons

 

详解介绍:

1.选项菜单(option menu),当用户按下menu键或者调用openOptionsMenu()打开,第一次打开会依次回调:public boolean onCreateOptionsMenu(Menu menu)和public boolean onPrepareOptionsMenu(Menu menu

,以后每次打开只会回调: public boolean onPrepareOptionsMenu(Menu menu).返回键或者调用public void closeOptionsMenu()会关闭menu.会回调事件:public void onOptionsMenuClosed(Menu menu)

所以一般在onCreateOptionsMenu(Menu menu)中初始化:

 

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
     super.onCreateOptionsMenu(menu);
     //通过MenuInflater将XML 实例化为 Menu Object
     MenuInflater inflater = getMenuInflater();
     inflater.inflate(R.menu.menu, menu);
     return true;
 }
 

 

 

boolean onPrepareOptionsMenu(Menu menu)
·这个方法将已经创建的 Menu 实例作为参数传递,这样的话就可以移除、添加、修改菜单项。

·Android 2.3及其之前的版本,系统在用户每次打开Options Men 时会调用onPrepareOptionsMenu()方法。

·Android 3.0及其之后的版本,当你要更新菜单时你必须调用 invalidateOptionsMenu() 方法,因为菜单

  是一直打开着的,然后系统会自动调用 onPrepareOptionsMenu() 方法。

 

 

事件处理:public boolean onOptionsItemSelected(MenuItem item)

 

 

@Override
 public boolean onOptionsItemSelected(MenuItem item) {
     switch (item.getItemId()) {
         case R.id.about:
             // 显示关于页
             displayAboutBox();
             return true;
         case R.id.help:
             // 显示到帮帐页
             displayHelpDialog();
             return true;
         case R.id.settings:
             // 跳转到配置页
             displaySettings();
             return true;
         case R.id.quit:
             // 退出程序
             finish();
             return true;
         default:
             //返回False交由系统正常处理菜单,返回True则由本程序处理
             return false;
     }
 }
 

 

 

2.上下文菜单(content menu):长时间按住view会产生,需要在某个view上注册

说明:长时间按住就会调用oncreatecontextMenu,但是也可以调用public void openContextMenu(View view)打开,关闭时可以调用:closeContextMenu()

定义的xml格式和选项菜单是一样的,初始化调用public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)

 

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.meetings_context_menu, menu);
}

 

 事件处理:onContextItemSelected

 

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.delete_meeting:
            postionOfMeetingToDelete = info.position;
            showDialog(CONFIRM_DELETE_MEETING_DIALOG);
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
 

 

注册菜单:registerForContextMenu和解除注册 unregisterForContextMenu

 

关闭时所回调的事件:onContextMenuClosed

 

注意:ContextMenu 与 OptionsMenu 的菜单资源XML文件格式完全相同,不能显示icon,但是ContextMenu可以具有自己的标题栏;

   ·通过setHeaderIcon、setHeaderTitle、setHeaderView、clearHeader方法控制标题栏的显示。

   ·ContextMenu 继承自 Menu ,标题栏相关的方式是扩展的方法。

多个 View 可以同时注册同一个 ContextMenu 

 

有些 View 会自带系统的 ContextMenu,比如 EditText 会自带“输入法”“复制”“粘贴”等菜单项,

再对这些 View 注册 ContextMenu 时,会将系统菜单项和自己注册的菜单项融合到一起

 

 

3.sub menu(子菜单):在定义选项菜单和上下文菜单时可以加入子菜单,当子菜单被选中时 仍然调用和父类菜单选中时一样的方法.

可以动态的通过addsubmenu和add方法添加子菜单和子菜单项

子菜单有相应的标题栏和相应的方法

 

其余的特性:

菜单组:可以通过menu.setGroupCheckable();

menu.setGroupEnabled();

menu.setGroupVisible()

进行同意设置

 

可以通过group的android:checkableBehavior属性设置组菜单项的选择模式

 

single
Only one item from the group can be checked (radio buttons)
all
All items can be checked (checkboxes)
none
No items are checkable

 

 

但是选择后我们要手动的改变状态,使用方法:setChecked()

 

 

 

 

 

 

分享到:
评论

相关推荐

    android 资源管理

    所有的资源文件都放在`res`目录下,不同类别的资源需要放置在不同的特定名称的子文件夹中,或者是写在特定文件名的文件中。 ##### 1.3 创建资源文件 资源文件可以在项目`res/`目录下的适当子目录中创建和存储。...

    Android典型技术模块开发详解

    2.2 HelloAndroid详解 2.2.1 程序结构 2.2.2 代码分析 2.3 权限permission 2.4 LogCat日志调试 2.5 示例练习 2.5.1 登录界面 2.5.2 事件处理 2.6 本章小结 第二篇 Android开发关键组件 第3章 Activity(活动) 3.1 ...

    疯狂Android讲义源码

     6.7 使用菜单(Menu)资源 239  6.7.1 定义菜单资源 239  6.7.2 使用菜单资源 240  6.8 样式(Style)和主题(Theme)  资源 243  6.8.1 样式资源 243  6.8.2 主题资源 245  6.9 属性(Attribute)资源 247...

    的Unity3D认证级游戏开发核心训练视频教程

    - **菜单栏(Menu Bar)**:包含文件(File)、编辑(Edit)、资产(Assets)等常用选项。 - **检视面板(Inspector Panel)**:用于查看和编辑对象属性。 - **层级视图(Hierarchy View)**:展示当前场景中的所有对象层次结构...

Global site tag (gtag.js) - Google Analytics