1.构造函数

//方法一:
    public PopupWindow (Context context)
    //方法二:
    public PopupWindow(View contentView)
    //方法三:
    public PopupWindow(View contentView, int width, int height)
    //方法四:
    public PopupWindow(View contentView, int width, int height, boolean focusable)

方法三和方法四常用

2.显示函数

    //相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor): //相对某个控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上;
showAsDropDown(View anchor, int xoff, int yoff): //相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
showAtLocation(View parent, int gravity, int x, int y):

  

3.常用函数

1 dismiss()
使popupwindow消失 2 setTouchable(boolean touchable)
设置PopupWindow是否响应touch事件,默认是true,如果设置为false,即会是下面这个结果:(所有touch事件无响应,包括点击事件) 3 setFocusable(boolean focusable)
该函数的意义表示,PopupWindow是否具有获取焦点的能力,默认为False。一般来讲是没有用的,因为普通的控件是不需要获取焦点的,而对于EditText则不同,如果不能获取焦点,那么EditText将是无法编辑的。 4 setOutsideTouchable(boolean touchable)
这个函数的意义,就是指,PopupWindow以外的区域是否可点击,即如果点击PopupWindow以外的区域,PopupWindow是否会消失。 5 setBackgroundDrawable(Drawable background)
1. 设置背景
2. 只有setBackgroudDrawable后,setOutsideTouchable()才能起作用
3. 加上后,手机的返回按钮才有响应

1)设置获取contentview

public void setContentView(View contentView):设置要显示的布局
public View getContentView():获取显示的布局

2)设置宽高

setWidth(LayoutParams.WRAP_CONTENT):设置宽度
setHeight(LayoutParams.WRAP_CONTENT):设置高度

3)设置点击空白处Popupwindow消失

设置点击空白处Popupwindow消失(3个方法都要设置)
setFocusable(true);
setOutsideTouchable(true);

//设置背景(选择其中一个)
setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));
setBackgroundDrawable(new BitmapDrawable());
setBackgroundDrawable(new ColorDrawable(0x00000000))

4)添加动画效果

1.在工程res下新建anim文件夹,在anim文件夹先新建两个xml文件

  menu_bottombar_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="250"
android:fromYDelta="100.0%"
android:toYDelta="0.0" />
</set>

  menu_bottombar_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="250"
android:fromYDelta="0.0"
android:toYDelta="100%" />
</set>

  

2.在res/value/styles.xml添加一个sytle

<style name="anim_menu_bottombar">
<item name="android:windowEnterAnimation">@anim/menu_bottombar_in</item>
<item name="android:windowExitAnimation">@anim/menu_bottombar_out</item>
</style>

  

3.setAnimationStyle(R.style.menu_anim_bottombar);

4.其他函数

    //返回该popup window出现或消失的动画类型,返回值为整型
int getAnimationStyle() //返回popup window的背景,返回值为Drawable类型
Drawable getBackground() //设置该popup window显示的内容
View getContentView()
//返回popup window展示的内容,返回值为一个View
void setContentView(View contentView) //返回该popup window的高度值,返回值为int型
int getHeight() //设置该popup window是否获得焦点
void setFocusable(boolean focusable) //设置输入法的模式,参数为这三个:INPUT_METHOD_FROM_FOCUSABLE(根据是否可以获得焦点决定), INPUT_METHOD_NEEDED(允许输入法), or INPUT_METHOD_NOT_NEEDED(不允许输入法)。
// 当popup window中包含EditText时可能会涉及这方面,可能是出现输入法显示在popup window后面,导致无法输入的问题,可以修改焦点和这里
void setInputMethodMode(int mode) //返回当前popup window对输入法的设置模式
int getInputMethodMode() //返回能使当前popup window完整显示的最大高度
int getMaxAvailableHeight(View anchor) //同上
int getMaxAvailableHeight(View anchor, int yOffset) //设置输入法的操作模式
void setSoftInputMode(int mode) //获得输入法的操作模式
int getSoftInputMode() int getWidth() void setHeight(int height) //判断popup window是否超出了父View的布局之外
boolean isAboveAnchor() //判断当前popup window是否获得焦点
boolean isFocusable() //判断当前pw的外界触碰是否有响应
boolean isOutsideTouchable() //判断当前popup window是否处于显示状态
boolean isShowing() //判断当前pw是否支持多点触碰
boolean isSplitTouchEnabled() //判断当前pw是否接受触摸事件
boolean isTouchable() //设置popup window的动画样式,有什么样式去Animation
void setAnimationStyle(int animationStyle) //设置pw背景
void setBackgroundDrawable(Drawable background) /*允许弹出窗口超出屏幕范围。默认情况下,窗口被夹到屏幕边界。设置为false将允许Windows精确定位。也就是说,如果这个Popupwindow显示区域 不足或者层叠将导致绘制位置计算不准确,需要手动设置为false */
boolean isClippingEnabled()
void setClippingEnabled(boolean enabled) //这个以前我也没见过,还蛮好玩。设置是否忽略“脸颊触碰”,默认为false,即不忽略。什么是“脸颊触碰”? Events都有一个大小,当Events的大小比手指尺寸大时即为CheekPress,这个可能常用于打电话时脸颊碰到屏幕的情况*/
void setIgnoreCheekPress() //popup window消失时的回调方法
void setOnDismissListener(PopupWindow.OnDismissListener onDismissListener) /*控制popup window以外的区域被点击后是否有影响,一般与setTouchInterceptor配合使用*/
void setOutsideTouchable(boolean touchable) //是否允许分开、多点触控,一般很少用,不容易控制
void setSplitTouchEnabled(boolean enabled) /*当popup window被触碰时的回调方法*/
void setTouchInterceptor(View.OnTouchListener l) //设置popup window是否可触碰
void setTouchable(boolean touchable) /*修改popup window的宽度,如果已经显示了popup window,修改后不会立即更新。只有下次出现或者调用update()方法才会更新*/
void setWidth(int width) //改变popup管理的window的尺寸
void setWindowLayoutMode(int widthSpec, int heightSpec) /*都是更新popup window的尺寸和位置,取决于你是在参数里进行改变,还是调用setWidth等方法改变后再更新*/
void update(int width, int height)
void update(View anchor, int width, int height)
void update(int x, int y, int width, int height)
void update(View anchor, int xoff, int yoff, int width, int height)
void update()
void update(int x, int y, int width, int height, boolean force)

  

5.代码体现

 private void showPopudown(View view) {
LayoutInflater inflater= (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View contentview=inflater.inflate(R.layout.popu_image,null);
ImageView img=contentview.findViewById(R.id.img);
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"图片被点击及了",Toast.LENGTH_SHORT).show();
}
}); popupWindow=new PopupWindow(contentview);
popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.setFocusable(true);
// popupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.setOutsideTouchable(true);
popupWindow.setAnimationStyle(R.style.anim_popup);
popupWindow.showAsDropDown(view,0,0);
// popupWindow.showAtLocation(findViewById(R.id.rl1), Gravity.BOTTOM,0,0); }

  

参考:

1. https://blog.csdn.net/u011240877/article/details/46058349

2.

PopupWindow简单使用(一)的更多相关文章

  1. Android:PopupWindow简单弹窗改进版

    Android:PopupWindow简单弹窗 继续上一节的内容,改进一下,目标是点击菜单后把菜单收缩回去并且切换内容,我使用的是PopupWindow+RadioGroup public class ...

  2. Android:PopupWindow简单弹窗

    两布局,一个当前布局页面和一个点击展示布局页面,主程序代码: public class MainActivity extends Activity { private PopupWindow pop; ...

  3. PopupWindow简单使用

    如图是效果图 当点击 “点我”的按钮是   会弹出 如图的 弹窗 补充为PopupWindow设置一个显示动画和消失的动画 先在anim的文件下分别设置显示和消失的动画 <?xml versio ...

  4. 使用android.graphics.Path类自绘制PopupWindow背景

    PopupWindow简单介绍 PopupWindow是悬浮在当前activity上的一个容器,用它能够展示随意的内容. PopupWindow跟位置有关的API有以下几个: showAsDropDo ...

  5. 掘金 Android 文章精选合集

    掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...

  6. PopupWindow的简单使用(结合RecyclerView)

    Android弹窗: 在Android中弹出式菜单(以下称弹窗)是使用十分广泛一种菜单呈现的方式,弹窗为用户交互提供了便利.关于弹窗的实现大致有以下两种方式AlertDialog和PopupWindo ...

  7. Android 属性动画实现一个简单的PopupWindow

    1.今天看到一个PopupWindow的效果如图: 2.其实就是属性动画的一个简单实用就ObjectAnimator就可以的,想实现更多,更灵活的可以用ValueAnimator 3.直接上代码: p ...

  8. Android—PopupWindow的简单使用

    PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,这个Demo要实现的功能是,点击布局中的两个按钮,进而控制PopupWindow的显示与消失,代码中有详细的注释首先看一 ...

  9. 简单 android popupwindow 实现

    1. popupWindow 设置大小: popupWindow = new  PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT, ViewGr ...

随机推荐

  1. Sqlite数据库中的事务

    public void testTrasaction() throws Exception{  PersonSQLiteOpenHelper helper = new PersonSQLiteOpen ...

  2. laravel中好用的支付安装包

    是包括支付宝和微信的支付 准用包,在测试中 https://github.com/yansongda/laravel-pay 这个包,看上去很好但是composer require时,要求php太高, ...

  3. linux中标准输出相关

    linux标准输出相关 http://blog.sina.com.cn/s/blog_5e99b41e0100tjtx.html

  4. 利用ffmpeg一步一步编程实现摄像头采集编码推流直播系统

    了解过ffmpeg的人都知道,利用ffmpeg命令即可实现将电脑中摄像头的画面发布出去,例如发布为UDP,RTP,RTMP等,甚至可以发布为HLS,将m3u8文件和视频ts片段保存至Web服务器,普通 ...

  5. Scanner的小实例

    package com.b; import java.util.Random; import java.util.Scanner; //猜拳游戏 1.人从键盘输入 2.计算机从电脑随机输入 3.条件判 ...

  6. MVC中Ajax post 和Ajax Get——提交对象Model

    HTTP 请求:GET vs. POST两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST.GET - 从指定的资源请求数据POST - 向指定的资源提交要处理的数据GET 基本上 ...

  7. mybatis~动态SQL(1)

    动态SQL MyBatis还有一个方便的功能就是动态SQL,可以根据条件智能生成SQL语句.这里的例子全部来自MyBatis文档. if标签 下面这个例子使用了MyBatis的if元素,在标题不为空的 ...

  8. oracle 11g R2 标准版 64位linux安装

    安装环境:Redhat es 5.5 64位 ,系统内存8G,swap 10G ,oracle 11G R2 标准版 一,Oracle 安装前的准备检查一下包,必须全部安装:binutils-2.17 ...

  9. 使用CallableStatement接口调用存储过程

    直接上下代码: package com.learn.jdbc.chap07; import java.sql.CallableStatement; import java.sql.Connection ...

  10. MAPREDUCE原理篇2

    mapreduce的shuffle机制 概述: mapreduce中,map阶段处理的数据如何传递给reduce阶段,是mapreduce框架中最关键的一个流程,这个流程就叫shuffle: shuf ...