本节书摘来自异步社区《Android 平板电脑开发实战详解和典型案例》一书中的第2章,第2.3节弹出菜单—— PopupMenu,作者 吴亚峰 , 杜化美 , 索依娜,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.3 弹出菜单—— PopupMenu
Android 平板电脑开发实战详解和典型案例
上一节中我们介绍了Switch的基本知识及简单案例。本节将介绍Android 3.0新增控件弹出菜单PopupMenu,主要内容包括其基本知识以及一个简单的案例。
2.3.1 弹出菜单基本知识
弹出菜单PopupMenu 是一个下拉菜单控件,可增加多条下拉菜单以及给每条下拉菜单增加子菜单。可通过new PopupMenu(context, view)创建一个下拉菜单,view为单击的控件,点此view时显示菜单。弹出菜单PopupMenu的继承树如图2-9所示。
2.3.2 弹出菜单使用案例
通过前面的介绍,读者对弹出菜单PopupMenu已经有了一个基本的了解,下面将通过一个简单的案例Sample2_3使读者进一步掌握弹出菜单PopupMenu的使用。在正式介绍此案例的开发步骤之前,首先请读者了解一下运行效果,如图2-10、图2-11和图2-12所示。
图2-10为程序运行效果图,图2-11和图2-12为选择天气后的效果图。
了解了案例的运行效果之后,下面开始介绍案例的开发,具体步骤如下。
(1)首先需要编写的是界面布局文件main.xml,其代码如下。
1 <?xml version="1.0" encoding="utf-8"?> <!--版本号和编码方式-->
2 <LinearLayout <!--水平布局-->
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 android:orientation="horizontal" <!--排列方式 -->
5 android:layout_width="fill_parent" <!--宽充满父类控件-->
6 android:layout_height="fill_parent"> <!--高充满父类控件-->
7 <ImageView <!--图像视图-->
8 android:id="@+id/imageview" <!--设置ID->
9 android:src="@drawable/png_sun" <!--初始图片-->
10 android:layout_width="400dip" <!--设置宽度 -->
11 android:layout_height="400dip"> <!--设置高度-->
12 </ImageView>
13 <Button <!--按钮-->
14 android:id="@+id/popupbutton" <!--设置ID-->
15 android:text="@string/popup" <!--设置文本-->
16 android:layout_width="200dip" <!--设置宽度-->
17 android:layout_height="50dip"> <!--设置高度-->
18 </Button>
19 </LinearLayout>
该主界面的布局比较简单,在一个充满整个屏幕水平排列的LinearLayout控件左侧放置了一个宽充满父控件的ImageView,右侧为一个Button。
(2)完成了布局文件main.xml的开发后,接下来需要编写一个负责菜单选项摆放的配置文件popupmenu.xml,其代码如下。
1 <?xml version="1.0" encoding="UTF-8"?>
2 <menu xmlns:android="http://schemas.android.com/apk/res/android">
3 <item
4 android:id="@+id/sun" <!--item的编号-->
5 android:title="@string/sun"> <!--item的标题-->
6 </item>
7 …… //后面的代码与上面极其类似,有需要的读者可以自行查看随书光盘中的源代码。这里不再赘述。
8 </menu>
上述代码实现的功能是设置菜单选项的摆放,根据需要添加选项,每个选项包括id和名称,其中名称是在界面中选项显示的文字。
(3)完成了菜单选项摆放的配置文件popupmenu.xml的开发后,下面将要开发的是主Activity对应的类PopupMenuPicActivity,其代码如下。
1 package com.bn.sample2_3; //声明包
2 ……//该处省略了部分类的导入代码,读者可自行查看随书光盘中的源代码
3 public class PopupMenuPicActivity extends Activity {
4 @Override
5 public void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 setTheme(R.style.mytheme1);
8 setContentView(R.layout.main); //设置界面布局
9 final Button popupbutton=(Button)this.findViewById(R.id.popupbutton); //获得按钮的引用
10 popupbutton.setOnClickListener //为按钮设置监听
11 (new OnClickListener(){
12 @Override
13 public void onClick(View v){ //单击事件
14 PopupMenu popupmenu=new PopupMenu(
15 PopupMenuPicActivity.this, popupbutton); //创建一个快捷菜单
16 popupmenu.getMenuInflater().inflate(
17 R.menu.popupmenu, popupmenu.getMenu()); //为快捷菜单填充菜单
18 popupmenu.setOnMenuItemClickListener ( //为快捷菜单设置监听
19 new PopupMenu.OnMenuItemClickListener(){
20 @Override
21 public boolean onMenuItemClick(MenuItem item) {
22 ImageView v=(ImageView) //获取图像视图的引用
23 PopupMenuPicActivity.this.findViewById(R.id.imageview);
24 switch(item.getItemId()){ //根据标签id设置不同图 标
25 case R.id.sun: //晴
26 iv.setImageResource(R.drawable.png_sun);
27 break;
28 case R.id.rain: //雨
29 iv.setImageResource(R.drawable.png_rain);
30 break;
31 case R.id.cloud: //多云
32 iv.setImageResource(R.drawable.png_cloud);
33 break;
34 case R.id.snow: //雪
35 iv.setImageResource(R.drawable.png_snow);
36 break;
37 case R.id.thunder: //雷阵雨
38 iv.setImageResource(R.drawable.png_thunder);
39 break;}
40 Toast.makeText( //单击完毕出提示Toast
41 PopupMenuPicActivity.this,
42 "您选择了:"+item.getTitle(),
43 Toast.LENGTH_SHORT).show();
44 return true;}});
45 popupmenu.show();}});}} //显示快捷菜单
第7~10行为设置主题和界面布局并获得按钮引用并添加监听,第14~18行为创建一个快捷菜单并为其设置对应的菜单标签和为快捷菜单设置监听。
第24~39行为快捷菜单设置监听并根据单击的标签采取不同的行动,第41~45行为设置单击完毕时提示的Toast。