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 }

Android学习之PopupWindow相关推荐

  1. Android 学习指南(2017版)

    Android 学习指南 不断有新人来询问如何学习Android,很多都是无从下手,没有任何概念.正好好久没写文章了,今天来整理一下Android学习大纲,同时也会附上部分学习资料,主要还是希望大家能 ...

  2. Android:Android学习路线图

    https://blog.csdn.net/libing1991_/article/details/53455243 前言 工作快一年,Android完全靠自学,看着那些基础教程一步步去做,写过简单的 ...

  3. Android学习——UI高级组件三

    Android学习--UI高级组件三 PopupWindow(弹出式窗口) Android的对话框有两种:PopupWindow和AlertDialog.它们的不同点在于:AlertDialog位置固 ...

  4. Android 学习网站(资源收集)

    http://www.open-open.com/news/view/c7eed7   //android 学习路线   http://blog.csdn.net/xiaanming/article/ ...

  5. Android学习之打造美女图片浏览器

    本文旨在教你打造一个真实的一个图片浏览器,并非写一堆链接用来测试:也算是用到Android基本的常用的知识,对于初学者来说是一个不错的练手demo:当然本文对于图片加载也有自己的一些见解,希望可以帮助 ...

  6. Android学习路线

    Android学习路线 第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环.  2.String和StringBuffer的使用.正则表达式.  3.面向对象的抽象,封装,继承 ...

  7. 一篇文章一张思维导图看懂Android学习最佳路线

    一篇文章一张思维导图看懂Android学习最佳路线 先上一张android开发知识点学习路线图思维导图 Android学习路线从4个阶段来对Android的学习过程做一个全面的分析:Android初级 ...

  8. Android学习系列(10)--App列表之拖拽ListView(上)

    研究了很久的拖拽ListView的实现,受益良多,特此与尔共飨.       鉴于这部分内容网上的资料少而简陋,而具体的实现过程或许对大家才有帮助,为了详尽而不失真,我们一步一步分析,分成两篇文章. ...

  9. Android学习第一书

    大家好,我是一名Facebook的工程师,同时也是<第一行代码--Android>的忠实读者. 虽然我最近几年是在国外读书和工作的,但是和很多人一样,我也非常喜欢郭霖的博客以及他写的< ...

最新文章

  1. Java应用程序中的性能改进:ORM / JPA
  2. pytest文档3-pycharm运行pytest
  3. QT的QStack类的使用
  4. java焦点图_javascript焦点图(能够自己主动切换 )
  5. 微信小程序轮播图中间变大_微信小程序实现带放大效果的轮播图
  6. 一个问题,两人讨论,几行代码,一些启发_刘未鹏
  7. 数据血缘关系图 工具_QCSPCChart SPC控制图工具,QCSPCChart SPC精湛而轻松
  8. 远程访问centos系统
  9. angular的生命周期
  10. python爬关键词百度指数_利用python+selenium_phantomjs批量获取百度指数 第一步 分析...
  11. 在XX小学六一儿童节庆祝大会上的致辞
  12. Redis Client UI工具
  13. python corrupt extra field_英语专四dictation模拟练习-沪江英语
  14. Messaging短信源码导入AndroidStudio
  15. SATA系列专题之六:浅析NCQ原生指令序列
  16. 美通社企业新闻汇总 | 2019.1.11 | 耐克中国物流中心升级,属于中国味蕾的黑珍珠餐厅指南发布...
  17. 山东大学 研一 高级算法设计与分析期末考试回忆版
  18. kvm 验证-模拟字节码执行
  19. 最新仿hao123带后台网址导航源码
  20. 章子怡汪峰深夜吃火锅

热门文章

  1. Apress Pro Android 2
  2. 数据挖掘、机器学习书籍推荐!!
  3. DataTables warning: Requested unknown parameter '0' from the data source for row '0'
  4. lua_string_pattern
  5. (周日赛)Sort the Array
  6. 2. Mysql数据库的入门知识
  7. jquery实战--定宽
  8. SQL Server 2008故障转移集群+数据库镜像配置实例之三
  9. 恢复快速启动栏里的“显示桌面”图标
  10. Java学习的快速入门:10行代码学JQuery