PopupWindow 解析-[Android_YangKe]

1. PopupWindow介绍

2. PopupWindow简单应用

3. PopupWindow添加动画


更专业更权威的详解请戳这里--https://developer.android.com/reference/android/widget/PopupWindow.html

老规矩ui图先放出来:

popupWindow.gif


1.PopupWindow介绍:

PopupWindow这个类代表一个弹出窗口,可以用来显示任意视图。出现的弹出窗口是一个浮动容器在当前的activit上,它跟对话框比较类似优点是更加的易于定制复杂的ui、可控性更强!例:将这个窗口显示在某一位置,某一view的下面等,这些是对话框所做不到的,你也可以根据自己的需求给窗口添加动画使自己的项目看起来更加高逼格,其实一个好的产品往往赢在细节、赢在体验上!下面将给出我的学习经历供大家学习,希望能给大家带来帮助,如有遗漏或者讲解不清楚的地方小伙伴可以给我发邮件,第一步当然是关注了,然后进入到我的主页 ……!

一部分代码看懂PopupWindow的类关系:

public class PopupWindow

extendsObject

java.lang.Object

↳android.widget.PopupWindow。

首先说一下访问修饰:public、protected、private、缺省(无访问修饰符)!相信这个只要是接触过java的小伙伴都应该了解它!这里重点说下public。public修饰的类我们可以在任意包下任意类中访问!其他修饰符有protected、private、缺省(无访问修饰符)具体的作用我就不多说了网上零零碎碎一大堆随时可以补充能量。使用public关键字修饰的类也就意味着我们可以在任何地方通过“new”直接创建对象,这样我们可以很简单的直接获取一个PopupWindow对象,然后使用。

2. PopupWindow简单应用

构建一个最基本的底部出来的PopupWindow,此方法很简单只有仅仅三行的代码,就可以构建出一个酷炫的PopupWindow!

View view = LayoutInflater.from(activity).inflate(R.layout.bot_window, null);

PopupWindow window =newPopupWindow(view,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT);

window.showAtLocation(activity.findViewById(R.id.bt_bottom_pop),Gravity.BOTTOM,0,0);

//将PopupWindow对象展示在mMenu的下面

//window.showAsDropDown(mMenu);

其中view对象是PopupWindow中需要显示的ui,通过showAtLocation()方法就可将PopupWindow悬浮在activity上,此方法在项目中经常用到,有需要的小伙伴们可以使用下面的代码认真研究下。这里详细说下方法中的四个主要参数:

 1. PopupWindow的参照物view(在此view的某一个方向点上)

 2. PopupWindow在界面中的位置(底部、顶部、居中)

 3. 相对窗口的x轴的偏移量

 4. 相对窗口的y轴的偏移量

项目中产品经理的需求往往都很奇葩、天马星空!没有两把刷子总是不能满足产品需求的!有时候产品经理会这样: 给ui加个透明度,点击空白处应该让窗口消失,默认输入法要隐藏,有个动画岂不是会好点等...

下面说几个项目中常用的几个方法供大家学习!

window.setFocusable(true);

ColorDrawable dw =newColorDrawable(0xb0000000);

dw.setAlpha(230);

window.setBackgroundDrawable(dw);

window.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);

//window.setInputMethodMode(PopupWindow.INPUT_METHOD_FROM_FOCUSABLE);

//window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);

这里特别说下window.setFocusable(true)和window.setBackgroundDrawable(dw)方法,前者给窗口设置一个焦点,后者给为窗口设置一个背景色。这两个方法的结合主要体现在用户点击空白处窗口关闭,且两者缺一不可。

window.setInputMethodMode()主要应用在PopupWindow中存在输入框的情况下,意思是键盘默认以什么样的方式进行显示,有需求的小伙伴可以深入看下,上面已给出常用的三种使用方式供学习(1. 有需要时显示、2. 点击输入框时显示、3. 始终不显示)。

3. PopupWindow添加动画

如果你刚刚主动敲了最原始PopupWindow体验效果应该是很不好的,所以为了提高用户的留存率我们需要将效果做的更加的“浪漫”!

window.setAnimationStyle(R.style.anim_menu_bottombar);

此方法中接收一个动画集,主要用于指定窗口进入的动画和窗口结束的动画。

这里给出核心代码,具体的动画效果自己可以根据业务需要进行定制。

privatePopupWindowshowMenuPopupWindow() {

View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.menu, null);

PopupWindow pw =newPopupWindow(contentView);

pw.setFocusable(true);

ColorDrawable dw =newColorDrawable(0x00000000);

dw.setAlpha(230);

pw.setBackgroundDrawable(dw);

pw.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);

pw.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);

pw.setAnimationStyle(R.style.anim_menu_exit);

pw.showAsDropDown(mMenu);

returnpw;

}

public staticPopupWindowshowBottomPopupWindow(Activity activity) {

View view = LayoutInflater.from(activity).inflate(R.layout.bot_window, null);

PopupWindow window =newPopupWindow(view,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT);

window.setFocusable(true);

ColorDrawable dw =newColorDrawable(0xb0000000);

dw.setAlpha(230);

window.setBackgroundDrawable(dw);

window.setAnimationStyle(R.style.anim_menu_bottombar);

// 系统决定键盘是否进行显示,以便用户可以操作时进行使用

//        window.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);

// 当点击输入框时弹出键盘

//        window.setInputMethodMode(PopupWindow.INPUT_METHOD_FROM_FOCUSABLE);

// 始终不显示键盘

window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);

window.showAtLocation(activity.findViewById(R.id.bt_bottom_pop),Gravity.BOTTOM,0,0);

returnwindow;

}

到这里就结束了!如果文章有遗漏或讲的不好的地方,欢迎拍砖!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容