AndroidGUI11:OptionsMenu的常用技巧

<!-- [if !mso]> <style> v/:* {behavior:url(#default#VML);} o/:* {behavior:url(#default#VML);} w/:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><!-- [if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:RelyOnVML/> <o:AllowPNG/> </o:OfficeDocumentSettings> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves>false</w:TrackMoves> <w:TrackFormatting/> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>ZH-CN</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> <w:UseFELayout/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="--"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-font-kerning:1.0pt;} </style> <![endif]-->

Menu 有几种形式:

1. Context MenuContext Menu 的菜单项 (Menu Item) 不支持快捷键,也不支持图标。

2. Option Menu 包含两种 MenuIcon MenuExpanded MenuIcon Menu 的菜单项 (Menu Item) 是唯一支持 IconMenu Item ,也是唯一不支持 CheckBoxRadio 按钮的 Menu ItemExpanded Menu 是一个竖直列表,当用户点击 Icon Menu 中的 “more” 菜单项时弹出。 “More” 菜单项,仅在 Icon Menu 菜单项超过 6 个时才会出现。

3. Sub Menu 本身支持 icon ,但 Sub Menu 的菜单项 (Menu Item) 不支持 iconSub Menu 也不支持嵌套的 Sub Menu

本文仅讨论上面的 23 两种情况。 Context Menu 将在另外一篇文章中讨论。

1. 首先将本项目要用到的一些图标资源,放入到 res/drawable-mdpi 文件夹下。

它们的文件名分别为:

cn.pnguk.pngus.pngau.pngch.png

它们的文件名分别为:

basketball.pngtableball.pngusfootball.pngvolleyball.pngboxing.pngcompass.pngfootball.pnggolf.pngiceskate.png

图片资源放到 res/drawable-mdpi 文件夹后,系统会自动为它们生成对应的 ID 号,比如为 cn.png 生成的 IDR.drawable.cn

2. 创建两个 Activity ,点击某些菜单项时会将界面分别跳转到这两个 Activity

第一个 Activity 代码:

public class Countries extends Activity

{

@Override

protected void onCreate(Bundle savedInstanceState)

{

super .onCreate(savedInstanceState);

setContentView(R.layout. countries );

}

}

第一个 Activity 对应的布局文件 countries.xml

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

< LinearLayout

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

android:orientation = "vertical"

android:layout_width = "fill_parent"

android:layout_height = "fill_parent" >

< ImageButton

android:id = "@+id/image_button1"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:src = "@drawable/cn"

/>

< ImageButton

android:id = "@+id/image_button2"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:src = "@drawable/uk"

/>

< ImageButton

android:id = "@+id/image_button3"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:src = "@drawable/us"

/>

< ImageButton

android:id = "@+id/image_button4"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:src = "@drawable/au"

/>

< ImageButton

android:id = "@+id/image_button5"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:src = "@drawable/ch"

/>

</ LinearLayout >

第二个 Activity 代码:

public class Anything extends Activity

{

@Override

protected void onCreate(Bundle savedInstanceState)

{

super .onCreate(savedInstanceState);

setContentView(R.layout. anything );

}

}

第二个 Activity 所对应的布局文件 anything.xml

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

< LinearLayout

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

android:layout_width = "wrap_content"

android:layout_height = "wrap_content" >

< TextView

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:textColor = "#FFFF00"

android:textSize = "30sp"

android:text = "Hello, Android!"

/>

</ LinearLayout >

3. AndroidManifest.xml 中,增加上述两个 Activity 的描述,否则当界面要跳转到它们时,系统会给出找不到 Activity 的警告。在 AndroidManifest.xml 中,在 Application 标签内,增加如下代码:

< activity android:name = ".Countries"

android:label = " 国家 " >

</ activity >

< activity android:name = ".Anything"

android:label = " 随便的信息 " >

</ activity >

4. 所需要的各种代码和素材都已经准备好了,下面主 Activity 的代码 ( 它所对应的布局文件,就用缺省的 main.xml 好了,这个无关紧要 )

public class ControlMenu extends Activity

implements

OnMenuItemClickListener

{

private static final int MAIN_GROUP = 0;

private static final int GENDER_GROUP = 1;

private static final int SPORTS_GROUP = 2;

private static final int GENDER_GROUP_MALE = 3;

private static final int GENDER_GROUP_FEMALE = 4;

private static final int SPORTS_GROUP_BASKETBALL = 5;

private static final int SPORTS_GROUP_ICESKATE = 6;

private static final int SPORTS_GROUP_VOLLEYBALL = 7;

private static final int SPORTS_GROUP_BOXING = 8;

private static final int MENU_GENDER = 9;

@Override

public void onCreate(Bundle savedInstanceState)

{

super .onCreate(savedInstanceState);

setContentView(R.layout. main );

}

@Override

public boolean onCreateOptionsMenu(Menu menu)

{

super .onCreateOptionsMenu(menu);

// Menu 可以增加 MenuItem , 很显然 , menu_countries 是一个 Icon Menu Item

MenuItem menu_countries = menu.add( " 国籍 " );

// 设定 menu_countries 的图标

menu_countries.setIcon(R.drawable. cn );

// menu_countries 这个菜单项被点击后 , 就会跳转到 Intent 对象中第二个参数所指定的 Activity

menu_countries.setIntent( new Intent( this , Countries. class ));

// =========================================================

// Menu 可以增加 SubMenuSubMenu 可以认为是 Menu 的菜单项

SubMenu subMenuSports = menu.addSubMenu( " 体育 " );

// SubMenu 本身可以有 icon , 但 SubMenu 的菜单项 , 则不支持 icon

subMenuSports.setIcon(R.drawable. tableball );

// 设定 SubMenuHeaderIcon

subMenuSports.setHeaderIcon(R.drawable. usfootball );

// SubMenu 可以增加 MenuItem(SubMenu 的菜单项 )

// public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)

// add 的第 3 个参数决定菜单项的先后顺序,越小排位越靠前,如果不关心菜单项的排列顺序,

// 可以让这个参数为 Menu.NONE( 即 0)

MenuItem menu_basketball = subMenuSports.add( SPORTS_GROUP , SPORTS_GROUP_BASKETBALL , Menu. NONE , " 篮球 " );

MenuItem menu_volleyball = subMenuSports.add( SPORTS_GROUP , SPORTS_GROUP_VOLLEYBALL , Menu. NONE , " 排球 " );

MenuItem menu_iceskate = subMenuSports.add( SPORTS_GROUP , SPORTS_GROUP_ICESKATE , Menu. NONE , " 滑冰 " );

MenuItem menu_boxing = subMenuSports.add( SPORTS_GROUP , SPORTS_GROUP_BOXING , Menu. NONE , " 拳击 " );

// setGroupCheckable 的第 2 个参数 , 表示整个菜单组里面的菜单项是否可以 checkable

// setGroupCheckable 的第 3 个参数 , 表示菜单项的选择是否为 exclusive

// 如果是 true , 则表明是 exclusive 的 , 即排他的 , 也就是每个菜单项是以单选按钮的形式出现的

// 如果是 false , 则表明是非 exclusive 的 , 即可以多选 , 也就是每个菜单项是以 checkbox 的形式出现的

subMenuSports.setGroupCheckable( SPORTS_GROUP , true , false );

menu_basketball.setChecked( true );

//menu_basketball.setIcon(R.drawable.basketball); // SubMenu 的菜单项 , 即使设置了 Icon , 也不会显示

menu_basketball.setOnMenuItemClickListener( this );

menu_volleyball.setChecked( true );

//menu_volleyball.setIcon(R.drawable.volleyball); // SubMenu 的菜单项 , 即使设置了 Icon , 也不会显示

menu_volleyball.setOnMenuItemClickListener( this );

menu_iceskate.setChecked( false );

//menu_iceskate.setIcon(R.drawable.iceskate); // SubMenu 的菜单项 , 即使设置了 Icon , 也不会显示

menu_iceskate.setOnMenuItemClickListener( this );

menu_boxing.setChecked( false );

//menu_boxing.setIcon(R.drawable.boxing); // SubMenu 的菜单项 , 即使设置了 Icon , 也不会显示

menu_boxing.setOnMenuItemClickListener( this );

// ===========================================================================================

MenuItem menu_anything = menu.add( " 爱好 " );

menu_anything.setIcon(R.drawable. boxing );

menu_anything.setIntent( new Intent( this , Anything. class ));

// 设置快捷键

menu_anything.setAlphabeticShortcut( 'H' );

// ===========================================================================================

SubMenu subMenuGender = menu.addSubMenu( MAIN_GROUP , MENU_GENDER , 0, " 性别 " );

subMenuGender.setIcon(R.drawable. us );

subMenuGender.setHeaderIcon(R.drawable. us );

// add 的第 3 个参数决定菜单项的先后顺序,越小排位越靠前,如果不关心菜单项的排列顺序,

// 可以让这个参数为 Menu.NONE( 即 0) ,下面的代码是会 " 女 " 菜单项在 " 男 " 菜单项之前。

MenuItem male = subMenuGender.add( GENDER_GROUP , GENDER_GROUP_MALE , 2, "" );

male.setChecked( true );

male.setOnMenuItemClickListener( this );

MenuItem female = subMenuGender.add( GENDER_GROUP , GENDER_GROUP_FEMALE , 1, "" );

female.setChecked( false );

female.setOnMenuItemClickListener( this );

// setGroupCheckable 的第 2 个参数 , 表示整个菜单组里面的菜单项是否可以 checkable

// setGroupCheckable 的第 3 个参数 , 表示菜单项的选择是否为 exclusive

// 如果是 true ,则表明是 exclusive 的,即排他的,也就是每个菜单项是以单选按钮的形式出现的

subMenuGender.setGroupCheckable( GENDER_GROUP , true , true );

// ============================================================================================

// 定义一个 Icon Menu Item( 该菜单项不处理任何事件 , 仅为了让 Icon Menu Item 超过 6 个 , 从而出现 “More”)

MenuItem menu_anything3 = menu.add( " 学位 " );

menu_anything3.setIcon(R.drawable. iceskate );

// ============================================================================================

// 定义一个 Icon Menu Item( 该菜单项不处理任何事件 , 仅为了让 Icon Menu Item 超过 6 个 , 从而出现 “More”)

MenuItem menu_anything4 = menu.add( " 语言 " ); // 前面 5Icon MenuItem 加上 More , 因此 Icon MenuItem 会超过 6 个 ,

menu_anything4.setIcon(R.drawable. hk ); // 所以 menu_anything4 , 会变成 Expanded Menu , 也就是说 , 给它设置

// 图标是没有意义的

// ============================================================================================

MenuItem menu_anything5 = menu.add( " 才艺 " ); // 也会变成 Expanded Menu

menu_anything5.setIcon(R.drawable. compass ); // 设置图标是没有意义的

menu_anything5.setIntent( new Intent( this , Anything. class )); // 跳转到 Anything 这个 Activity

return true ;

}

// OnMenuItemClickListener 接口要求我们实现 onMenuItemClick 方法

public boolean onMenuItemClick(MenuItem item)

{

// 功能示例

// 如果 itemchecked 状态 , 那么点击它以后 , 就会变成 unchecked 状态。反之亦然。

if (item.isChecked())

{

item.setChecked( false );

}

if (!item.isChecked())

{

item.setChecked( true );

}

return true ;

}

// 重写 Activity 中的 onOptionsItemSelected 方法

@Override

public boolean onOptionsItemSelected(MenuItem item)

{

String str = "" ;

// 如果点击的是体育这个菜单项

if (item.getTitle() == " 体育 " )

{

// 检查各菜单项被选中的情况:

if (item.getSubMenu().findItem( SPORTS_GROUP_BASKETBALL ).isChecked()) str += " 篮球 " ;

if (item.getSubMenu().findItem( SPORTS_GROUP_VOLLEYBALL ).isChecked()) str += " 排球 " ;

if (item.getSubMenu().findItem( SPORTS_GROUP_ICESKATE ).isChecked()) str += " 滑冰 " ;

if (item.getSubMenu().findItem( SPORTS_GROUP_BOXING ).isChecked()) str += " 拳击 " ;

// Toastchecked 的选项显示出来

Toast.makeText ( this , str, Toast. LENGTH_SHORT ).show();

}

return super .onOptionsItemSelected(item);

}

}

运行结果:

a) 点击模拟器上的 menu 按钮


b) 点击 More


从上面可以看到,尽管我们给“语言”和“才艺”这两个菜单项,在代码中增加了 Icon ,但在这里是看不到的。也就是说 Expanded Menu Item 是不支持 Icon 的。

c) a) 中点击“国籍”菜单项,将会切换到 Activity Countries 所拥有的界面,如下:


d) a) 中点击“体育”菜单项 ( 其实是一个 SubMenu) ,得到:


因为 subMenuSports.setGroupCheckable(SPORTS_GROUP , true , false ); 中的最后一个参数是 false ,所以显示的菜单项是 Checkbox 形式

e) a) 中点击“爱好”菜单项,将会切换到 Activity Anything 所拥有的界面,如下:


在代码中,我们以 menu_anything.setAlphabeticShortcut('H'); 形式为“爱好”菜单项添加了快捷键,因此,只要点击键盘上的“ h ”键,也会出现上述界面。这个特点在带有键盘的手机上应该比较有用,在没有键盘的手机上 ( 用软键盘 ) ,尽管也可以起作用,但用处不大。

f) a) 中点击“性别”菜单项 ( 其实是个 SubMenu) ,得到:


因为 subMenuGender.setGroupCheckable(GENDER_GROUP , true , true ); 中的最后一个参数是 true ,所以菜单项显示的是 Radio 的形式。

请注意,代码中的 Order 对菜单项显示顺序的影响。

g) “学位”菜单项,我们没有添加相应的代码,因此点击它,不会有什么响应。

h) 点击“ More ”会得到 b) 中所示的 Expanded Menu Item ,点击其中的“语言”菜单项,什么也不会发生,因为我们没有为这个菜单项增加对应的代码。

i) 点击“才艺”,和在 a) 中点击“爱好”菜单项一样,将会切换到 Activity Anything 所拥有的界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值