PopupWindow 解析-[Android_YangKe]

作者: Android_YangKe | 来源:发表于2016-12-09 15:34 被阅读735次

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;

}

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

相关文章

网友评论

  • xiaolei123:写public??解释public??
    Android_YangKe: @見面不如聞名 public修饰的类可以在任何地方使用“new”关键字进行创建对象!解释public主要是引出PopupWindow对象...

本文标题:PopupWindow 解析-[Android_YangKe]

本文链接:https://www.haomeiwen.com/subject/awdsmttx.html