博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android showatlocation 参数,Android Popwindow使用总结
阅读量:5106 次
发布时间:2019-06-13

本文共 3233 字,大约阅读时间需要 10 分钟。

1.基本使用方法

View view = getLayoutInflater().inflate(R.layout.activity_photo_preview, null);

......

if (popupBigPhoto == null) {

popupBigPhoto = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true);

popupBigPhoto.setOutsideTouchable(true);

popupBigPhoto.setOnDismissListener(this);

}

if (popupBigPhoto.isShowing()) {

popupBigPhoto.dismiss();

} else {

popupBigPhoto.showAtLocation(headview, Gravity.TOP, 0, 0);

}

2.属性方法

1.基本属性方法

// 设置PopupWindow的背景

window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

// 设置PopupWindow是否能响应外部点击事件

window.setOutsideTouchable(true);

// 设置PopupWindow是否能响应点击事件

window.setTouchable(true);

2.在弹窗出现后让背景变暗,并在弹窗消失后让背景还原

window.setOnDismissListener(new PopupWindow.OnDismissListener(){

@Override

public void onDismiss() {

WindowManager.LayoutParams lp=getWindow().getAttributes();

lp.alpha=1.0f;

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHND);

getWindow().setAttributes(lp);

}

});

window.showAtLocation(activityPopup, Gravity.BOTTOM, 0, 0);

WindowManager.LayoutParams lp=getWindow().getAttributes();

lp.alpha=0.3f;

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

getWindow().setAttributes(lp);

3.添加动画

自定义一个动画

@anim/translate_in

@anim/translate_out

添加动画

window.setAnimationStyle(R.style.animTranslate);

3.位置设置

相对于父布局的位置

public void showAtLocation(View parent, int gravity, int x, int y)

第二个参数gravity指的是popupWindow在父布局中出现的大致位置。常见的有 Gravity.NO_GRAVITY,Gravity.LEFT,Gravity.RIGHT,Gravity.TOP,Gravity.BOTTOM。

第三个参数int x指的是以第二个参数gravity指点的位置为原点,popupWindow相对于原点X轴上的位置。x为正popupWindow向右移动,x为负popupWindow向左移动。

第四个参数int y同X差不多,指的是y轴上的位置。y为正popupWindow向上,y为负popupWindow向下。

相对于某个控件的位置

public void showAsDropDown(View anchor)

public void showAsDropDown(View anchor, int xoff, int yoff)

public void showAsDropDown(View anchor, int xoff, int yoff, int gravity)

前两个方法不指定gravity 则popupWindow出现在anchor的正下方。

第一个参数anchor指的是你的popupWindow相对于的这个控件。

第二个参数xoff指的是popupWindow相对于原点X轴上的位置。x为正popupWindow向右移动,x为负popupWindow向左移动。

第三个参数yoff指的是popupWindow相对于原点y轴上的位置。y为正popupWindow向下,y为负popupWindow向上。

4.popwindow被软键盘遮挡实现方式

private void showPop(View view) {

if (popWindow != null && imms != null) {

imms.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);

}

if (popWindow == null) {

imms = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);

View layout = LayoutInflater.from(this).inflate(R.layout.live_qa_saysth, null);

......

popWindow = new PopupWindow(layout, ViewGroup.LayoutParams.MATCH_PARENT,

ViewGroup.LayoutParams.MATCH_PARENT, true);

popWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

imms.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);

popWindow.setBackgroundDrawable(new ColorDrawable(0xb0000000));

popWindow.setOutsideTouchable(true);

}

if (!popWindow.isShowing()) {

popWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);

} else {

popWindow.dismiss();

}

}

注意点

window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

window.setOutsideTouchable(true);

只有同时设置PopupWindow的背景和可以响应外部点击事件,它才能“真正”响应外部点击事件。也就是说,当你点击PopupWindow的外部或者按下“Back”键时,PopupWindow才会消失。

特殊情况处理:

1.在popwindow中嵌套viewpager时候,关于定位问题:首先保证viewpager类是同一个,就是没有新new一个类。然后在show的时候记得setCurrentItem()一下就好了。

参考资料

转载地址:http://teudv.baihongyu.com/

你可能感兴趣的文章
基于node/mongo的App Docker化测试环境搭建
查看>>
java web 中base64传输的坑
查看>>
秒杀9种排序算法(JavaScript版)
查看>>
Activiti入门 -- 环境搭建和核心API简介
查看>>
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
MySQL更改默认的数据文档存储目录
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
Java 多态 虚方法
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
万能的SQLHelper帮助类
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
Html5 离线页面缓存
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>