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. 第14篇 PSR-3规范(日志)

    1. Specification 1.1 Basics The LoggerInterface exposes eight methods to write logs to the eight RFC ...

  2. 解决spring 事务管理默认不支持SQLException等运行时异常

    公司同事在定位一个bug时,发现spring默认的事务只支持运行时异常的回滚,对于像SQLException这样的非运行时异常,默认的事务机制不能处理,于是找了下解决的办法:    1.在捕获SQLE ...

  3. shell中把大写字母转换成小写字母

    shell中把大写字母转换成小写字母 参考:http://www.jb51.net/article/40257.htm echo "AABBCC" | tr "[:upp ...

  4. go基本数据类型与运算符

    GO基本类型1.布尔(bool) 长度:1字节 取值范围:true,false 注意事项:不可用数字代表true或false2.整型(int/uint) 根据平台 肯能为32位或64位3. 8位整型: ...

  5. 在mac上 使用jenkins 执行python文件

    1.要选择 [执行 shell]构建

  6. 2012_p1 质因数分解 (prime.cpp/c/pas)

    2012_p1 质因数分解 (prime.cpp/c/pas) 时间限制: 1 Sec  内存限制: 128 MB提交: 80  解决: 27[提交][状态][讨论版][命题人:外部导入] 题目描述 ...

  7. ARM-Linux内核移植之(一)——内核启动流程分析

    内核版本:2.6.22  为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少. 内核启动分为三个阶段,第一是运行hea ...

  8. php浏览器端调试输出方法

     1.利用js打印到浏览器控制台 <?php function console_log($data) {     if (is_array($data) || is_object($data)) ...

  9. day3心得

    1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >>&g ...

  10. Linux批量“解压”JAR文件

    当你需要”解压“很多jar文件时,可以通过很多方式进行,比如下面这种 1,列出每一个jar文件名,逐个展开 for i in $(ls *sour*.jar);do jar xvf $i;done