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

news2025/8/9 5:36:23

简介

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">
 
    <Button
        android:id="@+id/btnTom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="汤姆"
        android:textSize="18sp" />
 
    <Button
        android: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">
 
    <Button
        android: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;
 
    @Override
    protected 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() {
            @Override
            public 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() {
            @Override
            public 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() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "你点击了Tom, Tom吃Jerry", Toast.LENGTH_SHORT).show();
            }
        });
        btnJerry.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "你点击了Jerry, Jerry揍Tom", Toast.LENGTH_SHORT).show();
                popWindow.dismiss();
            }
        });
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python面向对象(下)

python面向对象下封装封装的方法获取私有属性继承单一继承语法格式同名的情况私有属性的调用方法多重继承语法格式小例子同名的情况多态持续更新中~~~~~~~~~封装 封装是面向对象的核心思想。它是指将对象的属性和行为封装起来&#xff0c;其载体就是类&#xff0c;类通常对客户…

linux搭建git服务器,windows客户端配置git

Linux服务器配置之Git服务器搭建步骤&#xff1a; 一、配置环境 1、服务器&#xff1a;CentOS 8.2&#xff08;64位&#xff09; Git &#xff08;version 2.27.0&#xff09; 2、客户端&#xff1a;Windows 10 &#xff08;64位&#xff09; Git&#xff08;version 2.38.…

基于深度学习的AI绘画为何突然一下子火了?

CLIP &#xff5c;Midjourney | dreamstudio AIGC | Stable Diffusion | Imagen 随着Disco、Midjourney、dreamstudio 、AIGC、Stable Diffusion、Imagen、深度学习、高性能计算、数据分析、数据挖掘等技术的快速发展&#xff0c;AI绘画技术得到迅速发展。 即使今年年初的AI绘…

Redis String类型使用方法

String 类型 String 类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类型。 其value是字符串&#xff0c;不过根据字符串的格式不同&#xff0c;又可以分为3类&#xff1a; string&#xff1a;普通字符串int&#xff1a;整数类型&#xff0c;可以做自增、…

国际站、速卖通、Lazada店铺运营技巧?如何提升销量?

现在国际站、速卖通、Lazada平台开店的卖家越来越多&#xff0c;如何让店铺稳定的使用下去&#xff0c;是每一个卖家都需要思考的问题。现在我们一起来看一看&#xff0c;有哪些运营上需要注意的事项。 1选择产品 不管什么平台都是一样&#xff0c;产品是根本&#xff0c;只有…

Handler 原理

线程的应用场景 Android是单线程模型&#xff0c;Activity、Service、Broadcast等组件的创建&#xff0c;都是在主线程完成的&#xff0c;即UI线程。但如果需要执行一些耗时的操作时&#xff0c;比如&#xff1a;I/O的读写、大文件的读写、数据库操作以及网络上传和下载等操作都…

Linux登陆配置虚拟机

启用虚拟机一、启动虚拟机1、登录虚拟机2、查看IP地址3、能否PING通外网二、配置静态IP地址1、修改网卡配置文件2、重启网络服务3、重启虚拟机4、查看修改后的IP地址5、测试虚拟机能否Ping通外网三、测试宿主机与虚拟机能否相互Ping通1、测试宿主机能否Ping通虚拟机2、测试虚拟…

信创产业多点开花,AntDB数据库积极参与行业标准研制,协同价值链伙伴共促新发展

11月&#xff0c;AntDB数据库积极参与多项数据库行业标准研讨会&#xff0c;助推行业规范建立&#xff1b;凭借领先的技术研发能力与企业创新能力&#xff0c;在今年9月入选了《2022爱分析数据智能厂商全景报告》&#xff0c;此次又凭借在信创市场的深入推广&#xff0c;入选《…

反转链表问题的递归解法

目录 一、反转整个链表 二、反转部分链表 一、反转整个链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 首先在方法中我们需要判断递归终止的情况&#xff0c;如果headnull或者head.nextnull&#xff0c;那么我们就可以直接返回hea…

【快速上手系列】保姆级Layuimini与SSM的联合使用教程(数据表格操作)

【快速上手系列】保姆级Layuimini与SSM的联合使用教程&#xff08;数据表格操作&#xff09; 使用步骤 导入layuimini 下载layuimini文件 这个并不是直接运行的&#xff0c;需要用HBuilder导入 layuimini的项目路径 我用的是iframe版&#xff0c;个人更喜欢这种的&#x1…

Git -- submoudule子模块使用

文章目录子模块的作用添加子模块拉取带子模块的项目修改子模块代码子模块的作用 通常情况下&#xff0c;我们做项目时会有几个业务功能区分比较明确的模块&#xff0c;比如简单来说&#xff0c;一个项目我们可以分为认证授权模块、工具类模块、常规业务模块。 而像认证…

【外卖项目实战开发一】

文章目录1、软件开发整体介绍2、外卖项目介绍3、环境搭建数据库环境搭建创建数据库执行SQL脚本数据表maven项目搭建添加依赖:application.yml配置application启动类4、后台登录功能开发需求分析代码开发5、后台退出功能开发1、软件开发整体介绍 软件开发流程 角色分工 软件…

基于JAVA的企业人力人事资源管理系统OA,部门、人员、薪资、招聘功能齐全的项目【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86427647 摘要 随着知识经济的崛起&#xff0c;掌握了高新技术和具有现代管理理念的人已成为经济发展的原动力。一个企业要在市场竞争中取得优势地位&#xff0c;依靠的主要不是物质资源&…

FCPX插件:Stupid Raisins Title Pop (78个动画标题+2个额外背景)

fcpx插件&#xff1a;Stupid RAIsins Title Pop for Mac激活版是兼容Final Cut Pro x的一款动画标题字幕插件。Stupid RAIsins Title Pop mac版包含78个fcpx动画标题2个额外背景&#xff0c;可以快速拖放编辑&#xff0c;使用基本&#xff0c;连续&#xff0c;充满活力&#xf…

电容笔做的比较好的品牌有哪些?高性价比电容笔测评

现在&#xff0c;高技术在推动数字产品的发展&#xff0c;同时也在增加。不管是工作还是学习&#xff0c;大屏幕可以使图像更加清晰。无论现在或将来&#xff0c;平板电脑都将成为我们日常生活中不可或缺的一部分。一款简单易用的电容笔&#xff0c;能够极大地提高我们的工作效…

7.9 用户接口

目录 一 序言 二 应用层实现 三 内核层实现 一 序言 这一部分&#xff0c;我们简单介绍一下用户接口。从本质上讲&#xff0c;操作系统就是对计算机硬件资源进行一个封装&#xff0c;从而方便用户来使用。前面几部分&#xff0c;我们重点介绍了操作系统自身的一些功能&#…

SpringBoot SpringBoot 原理篇 1 自动配置 1.5 proxyBeanMethod

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.5 proxyBeanMethod1.5.1 ImportResource1.5.2 proxyBeanMethod1 …

Qt使用QAudioInput、QAudioOutput实现局域网的音频通话

本文旨在介绍一下用Qt来实现局域网音频通话功能 技术实现 QAudioInput、QAudioOutput&#xff08;Qt采集和播放音频类&#xff09; QUdpSocket&#xff08;Qt的UDP通信类&#xff09; 话不多说&#xff0c;直接上代码链接&#xff0c;想下载的朋友可以直接去gitee下载。 整体…

项目管理范围(上)

范围管理概述 产品范围与项目范围的区别&#xff1a; 产品范围是指产品或者服务所应该包含的功能&#xff0c;项目范围是指为了能够交付产品&#xff0c;项目所必须做的工作。 什么是WBS&#xff1f; 工作分解结构&#xff08;简称WBS&#xff0c; Work Breakdown Structure…

科学孕育:婴幼儿食物过敏怎么办?

近年来&#xff0c;食物过敏的发病率呈明显上升趋势&#xff0c;已成为危害儿童健康的全球性问题。据统计&#xff0c;我国儿童食物过敏的发病率为3%~10%[1]。其中&#xff0c;0~4岁婴幼儿和学龄前儿童食物过敏的发病率最高。婴儿过敏反复发生.具有湿疹和食物过敏史的婴儿易患哮…