Android笔记 - UI Menu (1)

http://hi.baidu.com/xmjmcai/blog/item/f22a468b1400ae8fa4c272a9.html

http://hi.baidu.com/xmjmcai/blog/item/f22a468b1400ae8fa4c272a9.html

 

 

1.       菜单的种类

1)        OptionsMenu 选择菜单
这是应用程序最常用的菜单。当按下Menu按钮时弹出的菜单。

2)        ContextMenu 上下文菜单
当长按某个View时弹出的菜单。从理论上说和xp下的右击一致。

3)        SubMenu  子菜单
与其它两种菜单合用实现多级菜单。

2.       如何使用菜单呢?

1)        通常通过使用xml配置来实现菜单,很少使用代码来实现菜单。使用xml的好处就是很容易看清menu的结构。xml需要保存在res/menu/目录下,这样就可被android编译成menu类。
             

android:id属性:当菜单项被选择时,用于识别。

2)        1)中定义的Menu,此时并不区分它是OptionsMenu还是ContextMenu,即都有可能。下面粗体字是填充Menu的代码。
             

3.       创建OptionsMenu

1)        OptionsMenu通常是Activity最基本的动作。在Android2.3以及之前OptionsMenu显示如图,在Android3.0以及之后显示在Action Bar上,如图。
                         
       

2)        由于Activity默认情况已经实现了OptionsMenu,只是此时Memu为空。我们需要做的就是在onCreateOptionsMenu(Menu menu)回调函数中填充Menu即可。
             

3)        当用户点击菜单,Activity会返回MenuItem,通过getItemId得到它的id,根据返回id对照xmlandroid:id属性进行后续的操作。直接贴代码了:
             

值得注意的是返回ture说明已处理,返回false则说明未处理,系统会将MenuItem传递给父类处理。

4)        3),Android3.0提供了另一种处理方式。即在xml中的MenuItem中定义android:onClick属性,它的值对应Activity中的成员方法名。此时实现该成员方法就是对MenuItem点击的处理。

5)        如果在你的应用程序中多个ActivityOptionsMenu是一致的。为了提供可重用性,实现ActivityonCreateOptionsMenuonOptionsItemSelected,然后实现Activity继承于该Activity
当然上述的并不需要完全一致,只需将所有Activity的共同的MenuItem定义于父类即可。因为子类可以通过menu.add()添加新的MenuItem。由于每个Activity维护着自己的Menu,所以并不会对其他ActivityMenu造成影响。

6)        ActivityonCreateOptionsMenu创建Menu,这个函数只被调用一次。Android2.3以及之前是第一次使用OptionsMenu时调用。Android3.0以及之后是在创建Activity时调用。这样的话就意味着你无法修改Menu
为了能够修改MenuAndroid系统提供了onPrepareOptionsMenu函数,在该函数中你可以删除、添加、使能MenuItemAndroid2.3以及之前在每次显示OptionsMenu都会调用onPrepareOptionsMenuAndroid3.0以及之后需要调用invalidateOptionsMenu之后,才会调用该函数。
由于使用触摸屏是不会具有焦点focus。即当你使用触摸屏选择一个MenuItem时,该MenuItem并不会具有焦点。所以不要使用焦点的特性去修改Menu。如果你需要利用焦点的特性,可以选择ContextMenu

4.       创建ContextMenu

1)        XP下的右击功能类似。它是基于View的菜单。由于它是基于View的,所以它可以解决触摸屏没有焦点的问题。ContextMenu适用所有View,但应用时通常是ListView。为了提示用户具有ContextMenuListView通常会使用背景变化做为提示。

2)        使用ContextMenu,首先需要指定哪个View需要使用ContextMenu。通过调用registerForContextMenu(View)告知Activity

3)        OptionsMenu实现onCreateContextMenuonContextItemSelected
             

值得注意的是一个Activity中可以有多个View注册ContextMenu菜单,如何实现不同的ContextMenu呢?这也是onCreateContextMenuView参数的作用。
还有AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();的使用是为了判断ListView的哪个项被右击到了。

4)        如何动态修改ContextMenu呢?官网没介绍。

5.       创建SubMenu

1)        xml中的<menu>中嵌套<menu>即可。待考证:值得我关心的android的菜单似乎只支持二级菜单,即只能嵌套两层。

2)        SubMenu中的MenuItem被点击时,并没有特殊的处理。因为系统将SubMenu视为Menu的一部分,所以处理方法同它所在的Menu一致,即OptionsMenuContextMenu 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值