android Menu详解

三种类型的菜单

·Options Menu

The primary collection of menu items for an activity, which appears when the user touches the MENU button. When your application is running on Android 3.0 or later, you can provide quick access to select menu items by placing them directly in the Action Bar, as "action items."

·Context Menu

A floating list of menu items that appears when the user touches and holds a view that's registered to provide a context menu.

·Submenu

A floating list of menu items that appears when the user touches a menu item that contains a nested menu.

 

生成菜单资源

我们可以在程序代码中实例化Menu对象,也可以将所有菜单内容都定义在一个XML形式的菜单资源中,然后再通过加载菜单资源来生成Menu对象。我们倾向使用菜单资源来生成Menu对象。菜单资源必须存放在Android项目的res/menu/ 目录下,XML形式的菜单资源的主要元素:

·<menu>

Defines a Menu, which is a container for menu items. A <menu> element must be the root node for the file and can hold one or more <item> and <group> elements.

·<item>

Creates a MenuItem, which represents a single item in a menu. This element may contain a nested <menu> element in order to create a submenu.

·<group>

An optional, invisible container for <item> elements. It allows you to categorize menu items so they share properties such as active state and visibility. See the section aboutMenu groups.

下面是一个菜单资源文件:

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

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

    <item android:id="@+id/new_game"             

          android:icon="@drawable/ic_new_game"            

          android:title="@string/new_game" /> 

    <item android:id="@+id/help"           

          android:icon="@drawable/ic_help"      

          android:title="@string/help" /> 

</menu>

 

MenuInflater

·MenuInflater 的作用同 LayoutInflater 的作用一样,都是从XML形式的资源生成对应的实例对象;

·我们可以通过 Activity 的 getMenuInflater() 方法返回一个 MenuInflater 实例;

·获得这个实例之后就可以调用 inflate() 方法从XML形式的菜单文件生成一个 Menu 对象;

·在上面的例子中就是在 onCreateOptionsMenu() 方法中通过 MenuInflater 生成 Menu 对象的。

例如:

@Override 
public
 boolean onCreateOptionsMenu(Menu menu) 
   
 MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.game_menu,
 menu); 
   
 return true; 
}

 

菜单资源详解

(1)文件位置:res/menu/filename.xml
  
 文件名将作为资源ID.

(2)资源类型:菜单资源(Menu 或者其子类).

(3)资源引用:

   Java: R.menu.filename

   XML: @[package:]menu.filename

(4)语法:

<?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"

          android:actionLayout="@[package:]layout/layout_resource_name" 

          android:actionViewClass="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>

 

XML元素:

·<menu> :根元素,可以包含 <item> 或者 <group> 子元素;

          属性:

          xmlns:android :命名空间,必须为http://schemas.android.com/apk/res/android.

·<item> :菜单项,必须是 <menu>  <group> 的子元素,可以包含 <menu> 元素作为子菜单。

         属性:

         android:id :资源ID,形式如: "@+id/name"

         android:title :菜单标题,可以是直接的字符串,也可以是字符串资源;

         android:titleCondensed :菜单标题,可以是直接的字符串,也可以是字符串资源;只有当

              title指定的标题太长的时候才会使用titleCondensed作为短标题;

         android:icon Drawable资源;

          android:onClick :单击事件的处理函数;

          android:alphabeticShortcut Char,字母快捷键;

          android:numericShortcut Integer,数字快捷键;

          android:checkable true 或 false ;

         android:checked true 或 false ;

          android:visible true 或 false ;

          android:enabled true 或 false ;

          android:orderInCategory Integer. The "importance" of the item, within a group.

          android:menuCategory "container|system|secondary|alternative"

·<group> :A menu group (to create a collection of items that share traits, such as whether

             they are visible, enabled, or checkable). Contains one or more <item>elements.

             Must be a child of a <menu> element.

            属性:

          android:id

          android:checkableBehavior :"all|none|single"

          android:visible

          android:enabled

          android:menuCategory

          android:orderInCategory

 

例如:

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

    <item android:id="@+id/item1"

          android:title="@string/item1"  

          android:icon="@drawable/group_item1_icon"    

          android:showAsAction="ifRoom|withText"/>   

    <group android:id="@+id/group">   

         <item android:id="@+id/group_item1"   

               android:onClick="onGroupItemClick"   

               android:title="@string/group_item1"       

               android:icon="@drawable/group_item1_icon" />    

         <item android:id="@+id/group_item2"         

               android:onClick="onGroupItemClick"   

               android:title="@string/group_item2"     

               android:icon="@drawable/group_item2_icon" />   

    </group>  

    <item android:id="@+id/submenu"    

          android:title="@string/submenu_title"    

          android:showAsAction="ifRoom|withText" >     

        <menu>       

            <item android:id="@+id/submenu_item1"   

                  android:title="@string/submenu_item1" />   

        </menu>  

     </item>

</menu> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值