什么时候使用PopupWindow?

当业务需求的交互形式需要在当前页弹出一个简单可选项UI与用户进行交互时,可使用PopupWindow完成此功能开发

Android Dev API Doc


PopupWindow是一个View的容器,它不像Frament和Activity这些View容器一样有完整的生命周期。它只是用来简单呈现一个自定义View而已。

使用PopupWindow的一般步骤:

1.创建PopupWindow对象

2.设置创建ContentView,并设置。创建ContentView的方法很多,Inflater动态加载也行,Java代码创建也行

3.设置必要参数,Show PopWindow


PopupWindow显示在屏幕上之后,它的显示是不会受到物理回退键影响的,要实现物理回退,需要添加额外代码

主要方法:

a).创建PopupWindow对象

new PopupWindow(view ,LayoutParams,LayoutParams,focus);

View为PopWindow承载的View

LayoutParams为View的填充形式

b).是否可以获得焦点

setFocusable(bool)

如果不为true,则PopWindow无法接受用户输入

c).是否相应点击窗口外部事件

setOutsideTouchable(bool)

通过此属性配合添加一个BackgroundDrawable,则可实现点击窗口外部,弹窗消失的效果

d).弹出PopupWindow

showAtLocation()

showAsDropDown() , 此方法会根据ParentView来决定Popup的位置,如果ParentView在屏幕顶端,Popup会出现在ParentView下端,反之会出现在ParentView上端

e).设置PopupWindow对象的尺寸

setWidth()

setHeight()

PopupWindow是ContentView的承载View,所以无论ContentView的尺寸是多少,PopupWindow的尺寸只由自身决定。

所以如果忘记了setWidth,setHeight,那么调用showAsDropDown()的时候是看不到,因为PopupWindow对象本身尺寸为0


例子:

public class MainActivity extends Activity
{ @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btnTop = (Button)findViewById(R.id.btn_topBtn);
Button btnBottom = (Button)findViewById(R.id.btn_bottomBtn); btnTop.setOnClickListener(new btnClickListener());
btnBottom.setOnClickListener(new btnClickListener());
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} private void createPopup(View view)
{
PopupWindow pop = new PopupWindow(); TextView textView = new TextView(this);
textView.setText("i ' m textView"); pop.setContentView(textView);
pop.setBackgroundDrawable(new ColorDrawable(Color.RED));
pop.setWidth(500);
pop.setHeight(500);
//pop.setFocusable(true);
pop.setOutsideTouchable(true);
pop.showAsDropDown(view);
} private class btnClickListener implements OnClickListener
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
createPopup(arg0);
}
}
}

[Android学习笔记]PopupWindow的使用的更多相关文章

  1. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  2. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  3. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  4. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  5. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  6. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  7. Android学习笔记之Activity详解

    1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...

  8. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

  9. 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...

随机推荐

  1. Android 之SparseArray<E>详解

    SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch) pr ...

  2. asp.net 生成xml文件 与 asp生成xml文件

    一.asp.net 生成xml文件 webservice方式,调用接口: public XmlDocument List() { XmlDocument doc = new XmlDocument() ...

  3. python算法之二分查找

    说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看 ...

  4. Cocos2d-x教程(30)-3.x版本号物理引擎的使用

    转载时请注明原文出处 : http://blog.csdn.net/u012945598/article/details/38417333 在Cocos2d-x 2.x的版本号中,开发人员能够直接使用 ...

  5. 【模式识别】Boosting

    Boosting简单介绍 分类中通常使用将多个弱分类器组合成强分类器进行分类的方法,统称为集成分类方法(Ensemble Method).比較简单的如在Boosting之前出现Bagging的方法,首 ...

  6. Swift - 同步请求获取网络数据

    使用NSURLConnection可以实现http通信.它提供了异步请求和同步请求两种通信方式. 注意:同步请求数据会造成主线程阻塞,必须请求结束后用户才能做其他的操作,所有通常在请求大数据或者网络不 ...

  7. PEM文件格式具体解析

    PEM文件格式存档 Author:Roson sun sunxiao@tomonline-inc.com Time:2006-4-11 1.  描写叙述: Openssl使用PEM(RFC 1421- ...

  8. Delphi中JSon SuperObject 使用:数据集与JSON对象互转

    在delphi中,数据集是最常用数据存取方式.因此,必须建立JSON与TDataSet之间的互转关系,实现数据之间通讯与转换.值得注意的是,这只是普通的TDataset与JSON之间转换,由于CDS包 ...

  9. 基于visual Studio2013解决面试题之0504单链表逆序

     题目

  10. 基于visual Studio2013解决C语言竞赛题之1062高与矮

       题目 解决代码及点评 /************************************************************************/ /* 62 ...