Android入门第33天-Android里的弹出式对话框

news/2024/5/2 13:55:18/文章来源:https://blog.csdn.net/lifetragedy/article/details/128028734

简介

Android Studio里在4.0前有一种ProgressDialog,这个已经淘汰了。我们完全可以使用ProgressBar来取代。但是还有一种Dialog叫PopWindow,它是一种“可阻塞式Dialog”。即弹出后除非你给它一个“动作”否则就一直显示在那。

今天我们就来看看这种Dialog的使用,如下面界面截图。

PopWindow里是可以嵌套一个View的,这个View就好比我们之前学习的Adapter模式。你只要绘制好一个自己布局的View,然后使用:LayoutInflater.from(ctx).inflate(R.layout.item_popup, null, false);加载你的自定义View并使用PopupWindow popWindow = new PopupWindow(自定义View......)即可完成“嵌套”。

下面我们就来看实际例子。

课程目标

  1. 屏幕中间有一个【弹出Windows】的按钮
  2. 点击后该弹出内嵌2个子菜单,一个【汤姆】一个【杰瑞】;
  3. 在空白处点击屏幕,该弹出的窗口消失;
  4. 点击【汤姆】显示Toast;
  5. 点击【杰瑞】显示Toast并关闭弹出窗口;

前端代码

item_popup.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btnTom"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="汤姆"android:textSize="18sp" /><Buttonandroid:id="@+id/btnJerry"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="杰瑞"android:textSize="18sp" /></LinearLayout>

 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:layout_centerInParent="true"android:id="@+id/btnPopWindow"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="弹出Window"/>
</RelativeLayout>

 后端代码

MainActivity.java

package org.mk.android.demopopupdialog;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private Button btnPopWindow;private Context ctx;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ctx=MainActivity.this;btnPopWindow=(Button)findViewById(R.id.btnPopWindow);btnPopWindow.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {popWindow(view);}});}private void popWindow(View v) {View subDlgView = LayoutInflater.from(ctx).inflate(R.layout.item_popup,null, false);Button btnTom = (Button) subDlgView.findViewById(R.id.btnTom);Button btnJerry = (Button) subDlgView.findViewById(R.id.btnJerry);//1.构造一个PopupWindow,参数依次是加载的View,宽高final PopupWindow popWindow = new PopupWindow(subDlgView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);//这些为了点击非PopupWindow区域,PopupWindow会消失的,如果没有下面的//代码的话,你会发现,当你把PopupWindow显示出来了,无论你按多少次后退键//PopupWindow并不会关闭,而且退不出程序,加上下述代码可以解决这个问题popWindow.setTouchable(true);popWindow.setTouchInterceptor(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {return false;// 这里如果返回true的话,touch事件将被拦截// 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss}});popWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));    //要为popWindow设置一个背景才有效//设置popupWindow显示的位置,参数依次是参照View,x轴的偏移量,y轴的偏移量popWindow.showAsDropDown(v, 50, 0);//设置popupWindow里的按钮的事件btnTom.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "你点击了Tom, Tom吃Jerry", Toast.LENGTH_SHORT).show();}});btnJerry.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "你点击了Jerry, Jerry揍Tom", Toast.LENGTH_SHORT).show();popWindow.dismiss();}});}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_225349.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】基础IO —— 动静态库的制作与使用

&#x1f308;欢迎来到Linux专栏~~动静态库的制作与使用 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自…

Spring Boot 检索定时任务

概述 应用经常需要添加检索功能&#xff0c;开源的 ElasticSearch 是目前全文搜索引擎的首选。他可以快速的存储、搜索和分析海量数据。Spring Boot通过整合Spring Data ElasticSearch为我们提供了非常便捷的检索功能支持。 Elasticsearch是一个分布式搜索服务&#xff0c;提…

Unity3D占用内存太大怎么解决呢? -下

什么时候才是UnusedAssets?看一个例子&#xff1a; Object obj Resources.Load("MyPrefab"); GameObject instance Instantiate(obj) as GameObject; ......... Destroy(instance); 创建随后销毁了一个Prefab实例&#xff0c;这时候 MyPrefab已经没有被实际的物体…

5.XMLHttpRequest对象

XMLHttpRequest简称xhr&#xff0c;是浏览器提供的Javascript对象。之前我们使用的都是jQuery中的Ajax&#xff0c;现在我们使用原生JS的Ajax 目录 1 GET请求 1.1 不带参数请求 1.2 带参数请求 2 URL的编码与解码 2.1 编码 encodeURI() 2.2 解码 decodeURI() 3 …

【通用设计方法】之接收异常保护

目录 前言 一、接收异常保护 二、超短包、背靠背的支持 后记 前言 为了系统的鲁棒性&#xff0c;我们常常会做一系列的异常保护功能&#xff0c;避免系统挂死。 这里仅仅介绍接收保护的某些设计思路&#xff0c;抛砖引玉。 一、接收异常保护 设计思路&#xff1a;通过可配…

数据可视化大屏设计

在数据业务展示场景中&#xff0c;数据可视化大屏已经变得十分常见。那么在设计思路上&#xff0c;数据可视化大屏应当遵循什么样的设计逻辑&#xff1f;本篇文章里做了介绍&#xff0c;一起来看一下。 一、数据大屏的应用场景 1、大型会议 2、业务展示 二、数据大屏分类 1、展…

C语言源代码系列-管理系统之会员计费系统

往期文章分享点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过…

【Python百日进阶-WEB开发-冲進Flask】Day183 - Flask数据库ORM基础、增加

文章目录一、day03项目环境和结构搭建1.1 flask-script1.1.1 flask-script是干什么的&#xff1f;1.1.2 flask-script安装1.1.3 flask-script的使用1.1.3.1 创建Manager实例1.1.3.2 初始化实例出错与解决1.1.4 终端启动1.1.4.1 查看runserver参数1.1.5 自定义添加manager命令1.…

linux篇【11】:linux下的线程<前序>

目录 一.linux下的线程 1.linux下的线程概念 &#xff08;1&#xff09;教材上粗略的 线程 定义 &#xff08;2&#xff09;线程的引入 &#xff08;3&#xff09;线程真正定义 以及 示意图 &#xff08;4&#xff09;linux 和 windows等其他操作系统的线程对比 &#xf…

新的趋势:From Big to Small and Wide data

新的趋势&#xff1a;From Big to Small and Wide data 所以&#xff0c;在这个时候&#xff0c;作为率先提出要做 MySQL 开源 HTAP 数据库的 StoneDB&#xff0c;想要稍微冷静一下。 不是说我们不做 HTAP 了&#xff0c;而是有了一个新的思路。这个思路&#xff0c;也同样来…

【亲测】网址引导页管理系统

介绍&#xff1a; 易航网址引导系统-网址引导页管理系统去授权版一款极其优雅的易航网址引导页管理系统&#xff0c; 如果有问题可以跟我反馈&#xff0c;共同进步。祝各位道友一路飞升&#xff0c;顶峰相见&#xff01;内置12套模板和防墙插件。 项目亮点&#xff1a; 1、…

Redis基础命令(String类型)Value为JSON

目录 String类型&#xff08;存储的值为JSON形式&#xff09; 问题&#xff1a; 解决办法&#xff1a; 示例&#xff1a; 实际操作&#xff1a; 总结&#xff1a; String类型&#xff08;存储的值为JSON形式&#xff09; 问题&#xff1a; Redis没有类似MySql中的表的概…

2022年戈登·贝尔奖授予等离子体加速器突破研究

ACM 总裁Cherri Pancake&#xff08;图片来源&#xff1a;网络&#xff09; 11月17日&#xff0c;在达拉斯举行的SC22颁奖典礼上&#xff0c;ACM将2022年戈登贝尔奖&#xff08;Gordon Bell Prize&#xff09;授予了一组研究人员&#xff0c;他们利用四台超级计算机&#xff08…

【Flink】基本转换算子使用之fliter、flatMap,键控流转换算子和分布式转换算子

文章目录一 Flink DataStream API1 基本转换算子的使用&#xff08;1&#xff09;flitera 使用匿名类实现b 使用外部类函数实现b 使用flatMap实现&#xff08;2&#xff09;flatMapa 使用匿名类实现b 使用匿名函数实现2 键控流转换算子&#xff08;1&#xff09; keyBy&#xf…

中国互联网众筹行业

近些年&#xff0c;中国互联网发展迅速&#xff0c;众筹这种起源于美国的新型互联网金融模式更是一直处于风口浪尖。在“大众创业、万众创新”的背景下&#xff0c;这种低门槛的融资模式也深受欢迎&#xff0c;加上阿里、京东、苏宁三大电商的巨头的相继入场&#xff0c;更令这…

IMS各网元的主要功能

文章目录用户注册时&#xff1a; 手机发出一个注册消息到他所在的拜访地的P。 比如&#xff0c;他是山西太原的用户&#xff0c;他这时候到了北京&#xff0c;那么这个时候&#xff0c;他要注册到IMS网络里面的话&#xff0c;这个P-CSCF就是北京的P-CSCF&#xff0c;这个北京的…

CAS号:376364-38-4,rCRAMP (rat)

rCRAMP (rat) 是一种大鼠组织蛋白酶相关的抗菌肽&#xff0c;有助于大鼠脑肽/蛋白质提取物的抗菌活性。rCRAMP (rat) 是大鼠中枢神经系统先天免疫系统的关键参与者。rCRAMP (rat) is the rat cathelin-related antimicrobial peptide. rCRAMP (rat) contributes to the antibac…

Kotlin 开发Android app(十一):Android控件RecyclerView

Android 中的控件非常的丰富&#xff0c;我们会陆陆续续的进行介绍&#xff0c;从第九节开始&#xff0c;关于Kotlin 的语法特性就差不多结束&#xff0c;后面如果有发现需要说明的语法&#xff0c;再进行相关的补充。 在Android的控件中&#xff0c;RecyclerView算是一个大控…

从 Uber 数据泄露事件我们可以学到什么?

Uber 数据泄露始于一名黑客从暗网市场购买属于一名 Uber 员工的被盗凭证。最初尝试使用这些凭据连接到 Uber 的网络失败&#xff0c;因为该帐户受 MFA 保护。为了克服这一安全障碍&#xff0c;黑客通过 What’s App 联系了 Uber 员工&#xff0c;并假装是 Uber 的安全人员&…

OA系统,有效提升企业办公效率落实执行力

企业管理的成功将最终取决于企业的执行情况&#xff0c;只要有良好的经营管理&#xff0c;管理系统&#xff0c;一个好的领导者&#xff0c;充分调动员工的积极性&#xff0c;将能最大限度的管理执行力。 OA协同办公系统提供了工作流和协同工作互补结合。工作流程严格规定了工作…