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

相关文章
|
5月前
|
监控 Android开发 C语言
深度解读Android崩溃日志案例分析2:tombstone日志
深度解读Android崩溃日志案例分析2:tombstone日志
445 0
|
2月前
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
74 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
4月前
|
XML Java Android开发
34. 【Android教程】菜单:Menu
34. 【Android教程】菜单:Menu
98 2
|
4月前
|
开发工具 Android开发 开发者
Android Studio中两个让初学者崩溃菜单
Android Studio中两个让初学者崩溃菜单
50 0
|
2月前
|
API Android开发
Android使用AlertDialog实现弹出菜单
本文分享了在Android开发中使用AlertDialog实现弹出菜单的方法,并通过代码示例和错误处理,展示了如何避免因资源ID找不到导致的crash问题。
48 1
|
5月前
|
XML Android开发 数据格式
android 12 添加菜单
android 12 添加菜单
37 0
|
3月前
|
Java Android开发 Spring
Android Spingboot 实现SSE通信案例
【7月更文挑战第14天】以下是使用Android和Spring Boot实现SSE(Server-Sent Events)通信的案例摘要: 在`MainActivity`中: - 初始化界面元素并设置按钮点击事件。 - `startSseRequest`方法创建`WebClient`对象,设置请求头,发送请求,并处理响应和错误。 请确保将`your-server-url`替换为实际的服务器地址。
96 14
|
3月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
129 4
|
4月前
|
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对象并发送异步请求。
170 1
|
5月前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析