Android学习之PopupWindow

     Android的对话框有两种:PopupWindow和AlertDialog。 详细说明如下: AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情; AlertDialog的位置固定,而PopupWindow的位置可以随意; AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框; PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。 PopupWindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相对于某个控件(Anchor锚)和相对于父控件; PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。

一.使用popupWindow只需2步即可:

1.调用popupWindow的构造器创建PopupWindow对象;

2.调用popupWindow的方法将popupWindow显示出来,方法有三种:

    (1)popupWindow.showAtLocation(btn, Gravity.CENTER, 0, 0);

    (2)popupWindow.showAsDropDown(btn);//相对某个控件的位置(正左下方),无偏移

     (3)popupWindow.showAsDropDown(btn, 10, 10);//相对某个控件的位置,有偏移

二.其它常用设置:

    (1)popupWindow.setFocusable(true);//默认是false,当设置为true时,系统会捕获到焦点给popupWindow; 设置此参数获得焦点,否则无法点击;  

    (2)popupWindow.setOutsideTouchable(true); //点击PopupWindow区域外部,PopupWindow消失  

    (3)popupWindow.setAnimationStyle(R.style.PopupAnimation); //可以设置动画  

    (4)new PopupWindow(view,ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);//在构造函数中可以设置popupwindow的大小;

三. 简单实例:

1.效果图:

2.XML:

activity_main页面:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:gravity="center_horizontal"
 6     android:orientation="vertical" >
 7 
 8     <Button
 9         android:id="@+id/btn"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:text="弹出泡泡窗口" />
13 
14 </LinearLayout>

popup页面:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:gravity="center_horizontal"
 6     android:orientation="vertical" >
 7 
 8     <ImageView
 9         android:layout_width="240dp"
10         android:layout_height="wrap_content"
11         android:src="@drawable/img" />
12 
13     <Button
14         android:id="@+id/close"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:text="关闭" />
18 
19 </LinearLayout>

3.java代码:

 1 package com.example.popupwindow;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Gravity;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.widget.Button;
 9 import android.widget.PopupWindow;
10 
11 public class MainActivity extends Activity {
12 
13     private Button btn;
14     private Button btnClose;
15     private View inflaterView;
16 
17     @Override
18     public void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21 
22         initView();
23         
24     }
25 
26     private void initView() {
27         // 装载R.layout.popup对应的界面布局
28         inflaterView = this.getLayoutInflater().inflate(R.layout.popup, null);
29         btnClose = (Button) inflaterView.findViewById(R.id.close);
30         btn = (Button) this.findViewById(R.id.btn);
31 
32         final PopupWindow popupWindow = new PopupWindow(inflaterView, 300, 400);
33         btn.setOnClickListener(new OnClickListener() {
34             @Override
35             public void onClick(View arg0) {
36                 popupWindow.showAtLocation(btn, Gravity.CENTER, 20, 20);
37 
38             }
39         });
40 
41         btnClose.setOnClickListener(new OnClickListener() {
42             @Override
43             public void onClick(View arg0) {
44                 popupWindow.dismiss(); // 关闭窗口
45             }
46         });
47     }
48 }

 

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

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

相关文章

Programming C#.Classes and Objects.只读字段

只读字段 当字段声明中含有 readonly 修饰符时&#xff0c;该声明所引入的字段为只读字段。给只读字段的直接赋值只能作为声明的组成部分出现&#xff0c;或在同一类中的实例构造函数或静态构造函数中出现。&#xff08;在这些上下文中&#xff0c;只读字段可以被多次赋值。&am…

xgboost 一般多少棵树_大白话人工智能算法-第32节集成学习之通俗理解XGBoost原理和过程...

本节讲解XGBoost的原理~目录1、回顾&#xff1a;1.1 有监督学习中的相关概念1.2 回归树概念1.3 树的优点2、怎么训练模型&#xff1a;2.1 案例引入2.2 XGBoost目标函数求解3、XGBoost中正则项的显式表达4、如何生长一棵新的树&#xff1f;5、xgboost相比原始GBDT的优化&#xf…

css文件修改后没变化 static_Go Web编程使用Go语言创建静态文件服务器

上篇关于Go模板库应用实践的文章最后我们留下一个问题&#xff0c;页面模板是通过 CDN引用的 BootStrap的 css&#xff0c; js文件。到目前位置我们的服务器还无法伺服客户端的静态文件请求把服务器磁盘上的文件响应给客户端。使用和配置过 Nginx服务器的一定知道 Nginx天然支持…

【linux】学习2

鸟哥那本书的第6章 文件权限&#xff1a; ^ ^ ^ ^ ^ ^ ^ 1 2 3 4 5 6 7 文件有 文件所有者、文件所属用户组 的概念如上图. 1. 十个字母表示文件…

IE 8 开发人员工具详解 【转载】

我的体会&#xff0c;IE 8 较之前面的的版本还是有不少改进的。使用体验上好很多&#xff0c;速度也不错。IE 要继续加油&#xff0c; 对于网页开发人员&#xff0c;IE8也提供了一个所谓的开发人员工具&#xff0c;通过F12可以调用出来 关于这套工具的使用细节&#xff0c;我就…

scrollwidth ,clientwidth ,offsetwidth 三者的区别

clientwidth:内容可视区域的宽度 offsetwidth:元素整体宽度 scrollwidth:实际内容的宽度 转载于:https://www.cnblogs.com/cuijin-book/p/10760656.html

python运算符与表达式

2019独角兽企业重金招聘Python工程师标准>>> 运算符用于连接两个相同类型的序列&#xff0c;s*n用于创建一个序列的n个副本。但是这些都是仅仅复制元素引用的浅复制。 例&#xff1a; a[3,4,5] b[a] c2*b 则c[[3,4,5],[3,4,5]] a[0]-7; 则c[[-7,4,5],[-7,4,5]]. 也…

phper必知必会之类库自动加载的七种方式(三)

## php自动加载 下面显示例子的文件目录结构图 一、没有使用命名空间的几种实现 test/oneClass.php class oneClass{public function show(){echo "这里是oneClass.php的show方法<br/>";}} test/twoClass.php <?phpclass twoClass{public function show(){…

c++ 箭头符号怎么打_焊接图纸符号标注图解示例,焊接符号标注实例及方法

基本坡口符号坡口符号(注&#xff1a;图中“破”应为“坡”)焊接图纸符号标注图解示例焊接符号标注实例及方法在焊接结构图样上&#xff0c;焊接方法可按国家标准GB5185-85的规定用阿拉伯效字表示&#xff0c;标注在指引线的尾部。常用焊接方法代号见表3-9所示。如果是组合焊接…

演示: GTS流量×××和CAR流量监管的效果及相关实践计划

演示&#xff1a; GTS流量和CAR流量监管的效果及相关实践计划演示目标&#xff1a;1 理解clock rate(时钟频率)和bandwidth&#xff08;带宽&#xff09;与接入速率的关系2 在模拟运营商的接入路由器ISP上配置CAR监管用户流量到认购速率64K3 取证模拟的企业网络以128K的接入速率…

跨线程访问控件

【转帖】 我们在做winform应用的时候&#xff0c;大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题&#xff0c;下面我将详细的介绍。 首先来看传统方法&#xff1a; public partial class Form1 : Form { public Fo…

解析Nginx负载均衡

摘要&#xff1a;对于一个大型网站来说&#xff0c;负载均衡是永恒的话题。随着硬件技术的迅猛发展&#xff0c;越来越多的负载均衡硬件设备涌现出来&#xff0c;如F5 BIG-IP、Citrix NetScaler、Radware等等&#xff0c;虽然可以解决问题&#xff0c;但其高昂的价格却往往令人…

深圳办理cdn经营许可证_深圳危化品经营许可证申请流程怎么申请?办理危化学品经营许可证...

随着深圳地区慢慢的进入了产业整合和城市规划规范化的运营中&#xff0c;很多涉及到生产的公司都逐渐被有效的整合在一起了&#xff0c;而随着深圳地区越发有效的整合生产规划&#xff0c;很多地区都逐渐的在将涉及到危险化学品生产和经营的企业都进行合理的管制&#xff0c;在…

Discuz!NT 缓存设计简析 [原创]

作为一个社区类型软件&#xff0c;大并发支持和高效稳定运行永远是“硬道理”&#xff0c;而有效安全的使用缓存恰恰能起到事倍功半的效果。而.NET本身所提供的缓存机制又显得过于“单薄”&#xff0c;比如说订制不太灵活方便, 缓存对象之间层次感不强, 使用时缺乏统一的管理等…

VSCode从下载到配置Ubuntu系统

Visual Studio Code从下载到配置Ubuntu系统 一、下载和安装Visual Studio Code 1、进入Visual Studio Code官网&#xff08;Visual Studio Code - Code Editing. Redefined&#xff09;&#xff0c;点击箭头所指地方下载红框内的安装包&#xff1b; 2、因为是国外网址下载&am…

python 写入excel 日期_Python实例:excel文档写入操作

来自PythonABC.org老师的课程很好&#xff0c;但是每个视频都蛮长的&#xff0c;听着听着就有些晕乎&#xff0c;所以根据视频自己整理了一下&#xff0c;以便记录学习使用Python实现excel的文档写操作import openpyxl from openpyxl.utils import get_column_letterwb openpy…

eclipse集成maven插件

一、准备工作 1. 安装jdk并配置&#xff1a;https://www.cnblogs.com/diandiangui/p/10002100.html  2. 已安装好 maven并配置&#xff1a;https://www.cnblogs.com/diandiangui/p/10768339.html  3. 安装eclipse并配置&#xff1a;https://www.cnblogs.com/diandiangui/p/…

批量改名_手把手教你用Python批量给图片添加水印 | 知了干货分享

我们在网上浏览一些文章的时候&#xff0c;经常会发现文章中会有一些图片&#xff0c;上面会有一些标识&#xff0c;而这些标识就是我们经常说的水印了。很多时候&#xff0c;我们需要给图片加上一些修饰&#xff0c;好让别人能直观的认识到这个图片的出处以及来源&#xff0c;…

linux环境下安装nginx步骤(不错)

开始前&#xff0c;请确认gcc g开发类库是否装好&#xff0c;默认已经安装。 ububtu平台编译环境可以使用以下指令 apt-get install build-essential apt-get install libtool centos平台编译环境使用如下指令 安装make&#xff1a; yum -y install gcc automake autoconf libt…