PopupWindow简单使用(一)
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简单使用(一)的更多相关文章
- Android:PopupWindow简单弹窗改进版
Android:PopupWindow简单弹窗 继续上一节的内容,改进一下,目标是点击菜单后把菜单收缩回去并且切换内容,我使用的是PopupWindow+RadioGroup public class ...
- Android:PopupWindow简单弹窗
两布局,一个当前布局页面和一个点击展示布局页面,主程序代码: public class MainActivity extends Activity { private PopupWindow pop; ...
- PopupWindow简单使用
如图是效果图 当点击 “点我”的按钮是 会弹出 如图的 弹窗 补充为PopupWindow设置一个显示动画和消失的动画 先在anim的文件下分别设置显示和消失的动画 <?xml versio ...
- 使用android.graphics.Path类自绘制PopupWindow背景
PopupWindow简单介绍 PopupWindow是悬浮在当前activity上的一个容器,用它能够展示随意的内容. PopupWindow跟位置有关的API有以下几个: showAsDropDo ...
- 掘金 Android 文章精选合集
掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...
- PopupWindow的简单使用(结合RecyclerView)
Android弹窗: 在Android中弹出式菜单(以下称弹窗)是使用十分广泛一种菜单呈现的方式,弹窗为用户交互提供了便利.关于弹窗的实现大致有以下两种方式AlertDialog和PopupWindo ...
- Android 属性动画实现一个简单的PopupWindow
1.今天看到一个PopupWindow的效果如图: 2.其实就是属性动画的一个简单实用就ObjectAnimator就可以的,想实现更多,更灵活的可以用ValueAnimator 3.直接上代码: p ...
- Android—PopupWindow的简单使用
PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,这个Demo要实现的功能是,点击布局中的两个按钮,进而控制PopupWindow的显示与消失,代码中有详细的注释首先看一 ...
- 简单 android popupwindow 实现
1. popupWindow 设置大小: popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT, ViewGr ...
随机推荐
- qt的下载地址
上Qt官网http://www.qt.io/download/想下载Qt,速度很慢,在这里记录下在Qt官网看到的镜像下载地址: 1. 所有Qt版本下载地址: http://download.qt.io ...
- asp.net数据分页方法
/// <summary> /// 数据分页方法 /// </summary> /// <param name="PageIndex">当前页& ...
- HTTP-POST
POST方式:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项,Post被设计成用统一的方法实现下列功能: 1:对现有资源的解释: 2:向电 ...
- 第11章 Tomcat的系统架构与设计模式
11.1 Tomcat总体设计 11.1.1 Tomcat总体架构 Tomcat和核心有连个组件:Connector和Container,Connector是可以被替换的.一个container可以有 ...
- 单片机keil C中的data、bdata、idata、xdata、hdata、pdata、code解释
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...
- 如何编写Word文档 多级编号
每次都忘 选择这个带标题的 这样可以根据标题来指定分级
- 吴恩达-AI-机器学习课后习题解析-第三周
================================================= sigmod.m ====================================== ...
- 01 asp.net编程笔记
1.asp.net 获取当前网址url 参考地址:http://www.cnblogs.com/190196539/archive/2011/12/13/2286072.html 设当前页完整地址是: ...
- 安装oracle xe一些注意点
主要是web管理数据的的端口8080端口的问题, 会和tomcat冲突 安装时把开启8080端口的tomcat启动了 占用8080端口就行了, 然后安装oracle xe就会让你输入 web管理数据的 ...
- 十三.sorted
排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的 ...