当前位置:编程学习 > XML/UML >>

Android ApiDemos示例解析(25):App->Menu->Inflate from XML

本例演示了如何从Menu 资源(XML 定义)展开菜单项。这个例子的onCreate 采用了使用代码来创建Activity 界面的方法 而通常的方法是采用Layout资源的方法。如果你有兴趣了解一下如何使用代码创建UI,可以参考本例的onCreate方法,但这不是本例的演示目的。
使用XML 菜单资源来展开菜单的一般步骤是
1. 在/res/menu目录下定义菜单资源,本例中定义了10种不同风格的菜单项:”Title only”, “Title and Icon”, “Submenu”, “Groups”,”Checkable”, “Shortcuts”, “Order”, “Category and Order”,”Visible”, “Disabled”。
最简单的Menu资源定义如下:只包括id 和title 定义。
<menu xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:id=”@+id/jump”
android:title=”@string/jump” />
<item android:id=”@+id/dive”
android:title=”@string/dive” />
</menu>
2. 展开菜单资源,Android支持两大类菜单Option Menu(主菜单),Context Menu  (上下文相关菜单)。本例使用Option Menu ,可以在public boolean onCreateOptionsMenu(Menu menu) 方法中使用MenuInflater 展开菜单资源:
 
[java] 
1. @Override 
2. public boolean onCreateOptionsMenu(Menu menu) { 
3.  // Hold on to this  
4.  mMenu = menu; 
5.   
6.  // Inflate the currently selected menu XML resource.  
7.  MenuInflater inflater = getMenuInflater(); 
8.  inflater.inflate 
9.  (sMenuExampleResources[mSpinner.getSelectedItemPosition()], 
10.  menu); 
11.   
12.  // Disable the spinner since we've already created the menu and the user  
13.  // can no longer pick a different menu XML.  
14.  mSpinner.setEnabled(false); 
15.   
16.  // Change instructions  
17.  mInstructionsText.setText(getResources().getString( 
18.  R.string.menu_from_xml_instructions_go_back)); 
19.   
20.  return true; 
21. } 
 

3. 为菜单添加处理事件的方法。
[java]
1. @Override 
2. public boolean onOptionsItemSelected(MenuItem item) { 
3.  switch (item.getItemId()) { 
4.  case R.id.jump: 
5.  ... 
6.  default: 
7.  .. 
 

 
但用户选择某个菜单时将触发onOptionsItemSelected 事件,参数item为用户选择的Menu Item,可以根据Menu 的 Id来实现菜单项对应的操作。
本例菜单使用10种不同的风格,基本使用方法是都是一样的,不同是定义在XML item的属性。
Title only
最简单的菜单,菜单只含有文本描述。


 

Title and Icon
菜单含有文字和图标。增加android:icon属性。
<item android:id=”@+id/happy”
android:title=”Happy”
android:icon=”@drawable/stat_happy” />

 
Sub Menu
尽管在手机使用多层菜单的可能性不大,但如果想使用sub Menu的话,Android 也可以支持多次菜单,这是通过嵌套定义Menu Item的方法来实现的:
<menu xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:title=”Normal 1″ />
<item android:id=”@+id/submenu”
android:title=”Emotions”>
<menu>
< item android:id=”@+id/happy”
android:title=”Happy”
android:icon=”@drawable/stat_happy” />

</menu>
< /item>
< item android:title=”Normal 2″ />
< /menu>


 

Groups
Menu定义上可以将一些相关的菜单定义为一个组,同组的菜单项可以定义一些相同的属性,比如可以使用setGroupVisible设置组内所有成员是否可见,setGroupEnabled可以组内所有成员是否有效等。组的定义是使用group来定义:
<group android:id=”@+id/browser”>
<item android:id=”@+id/refresh”
android:title=”@string/browser_refresh” />
<item android:id=”@+id/bookmark”
android:title=”@string/browser_bookmark” />
< /group>
组可以定义id,比如想将菜单组的可见性可以使用
[java] 
1. mMenu.setGroupVisible(R.id.browser, shouldShowBrowser); 
  
Checkable
对应定义了组的Menu Item可以定义组的checkable ,组内item可以继承组的checkable 属性,不在组内的item可以单独定义自己的checkable属性,定义了checkable属性的菜单将会以Check button或是Radio Button的风格显示:
checkable 定义了四种不同风格的checkableBehavior:
<menu xmlns:android=”http://schemas.android.com/apk/res/android”>
<!– Checkable items appear only in submenus or context menus. –>
<!– Carefully look at the attribute name checkableBehavior on groups, but
the attribute name checkable on items. The checkableBehavior encompasses
the number of items that will be checkable within that group. –>
<item android:title=”None”>
<menu>
< !– The none checkableBehavior is default, but we explicitly show it here. –>
<group android:id=”@+id/noncheckable_group”
android:checkableBehavior=”none”>
< !– Notice how these items inherit from the group. –>
<item android:id=”@+id/noncheckable_item_1″
android:title=”@string/item_1″ />
< item android:id=”@+id/noncheckable_item_2″
android:title=”@string/item_2″ />
< item android:id=”@+id/noncheckable_item_3″
android:title=”@string/item_3″ />
< /group>
< /menu>
< /item>
<item android:title=”All”>
<menu>
< group android:id=”@+id/checkable_group”
android:checkableBehavior=”all“>
< !– Notice how these items inherit from the group. –>
<item android:id=”@+id/checkable_item_1″
android:title=”@string/item_1″ />
< item android:id=”@+id/checkable_item_2″
android:title=”@string/item_2″
android:checked=”true” />
<item android:id=”@+id/checkable_item_3″
android:title=”@string/item_3″
android:checked=”true” />
< /group>
< /menu>
< /item>
<item android:title=”Single”>
<menu>
< group android:id=”@+id/exclusive_checkable_group”
android:checkableBehavior=”single”>
< !– Notice how these items inherit from the group. –>
<item android:id=”@+id/exclusive_checkable_item_1″
android:title=”@string/item_1″ />
< item android:id=”@+id/exclusive_checkable_item_2″
android:title=”@string/item_2″ />
< item android:id=”@+id/exclusive_checkable_item_3″
android:title=”@string/item_3″
android:checked=”true” />
< /group>
< /menu>
< /item>
<item android:title=”All without group”>
<menu>
< !–

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,