《Android 平板电脑开发实战详解和典型案例》——2.3节弹出菜单—— PopupMenu

简介:

本节书摘来自异步社区《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所示。


e56b999c91b7b172f5feacadebf542c6cfba3563

2.3.2 弹出菜单使用案例
通过前面的介绍,读者对弹出菜单PopupMenu已经有了一个基本的了解,下面将通过一个简单的案例Sample2_3使读者进一步掌握弹出菜单PopupMenu的使用。在正式介绍此案例的开发步骤之前,首先请读者了解一下运行效果,如图2-10、图2-11和图2-12所示。


f07926d322196466f9fc4a61c0965a5142bd8248

图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。

相关文章
|
2月前
|
监控 Android开发 C语言
深度解读Android崩溃日志案例分析2:tombstone日志
深度解读Android崩溃日志案例分析2:tombstone日志
212 0
|
1月前
|
XML Java Android开发
34. 【Android教程】菜单:Menu
34. 【Android教程】菜单:Menu
29 2
|
1月前
|
开发工具 Android开发 开发者
Android Studio中两个让初学者崩溃菜单
Android Studio中两个让初学者崩溃菜单
37 0
|
2月前
|
XML Android开发 数据格式
android 12 添加菜单
android 12 添加菜单
25 0
|
26天前
|
JSON Java API
【Android】使用 Retrofit2 发送异步网络请求的简单案例
**摘要:** Retrofit是Android和Java的HTTP客户端库,简化了RESTful API交互。它通过Java接口定义HTTP请求,并提供注解管理参数、HTTP方法等。要使用Retrofit,首先在AndroidManifest.xml中添加`INTERNET`权限,然后在`build.gradle`中引入Retrofit和Gson依赖。创建服务器响应数据类和描述接口的接口,如`Result`和`Api`。通过Retrofit.Builder配置基础URL并构建实例,之后调用接口方法创建Call对象并发送异步请求。
50 1
|
2月前
|
前端开发 Android开发
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
|
2月前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
|
2月前
|
编解码 Android开发
android 创建平板电脑模拟器(转)
android 创建平板电脑模拟器(转)
47 2
|
2月前
|
Java Android开发
Android 长按电源键弹出的GlobalActions菜单
Android 长按电源键弹出的GlobalActions菜单
36 1
|
2月前
android-agent-web中js-bridge案例
android-agent-web中js-bridge案例
35 2