PopupWindow使用竟然如此简单!
程序员文章站
2022-03-11 15:41:56
...
前言:在日常的开发中,经常会有弹框的操作。而实现弹框有两种选择,那就是PopupWindow或者Dialog,相信大家使用Dialog的更多一些,但是这里我推荐使用PopupWindow,因为AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(当然也可以通过设置WindowManager参数来改变位置)。而PopupWindow是可以指定显示位置的,所以更加的灵活,是可以适应复杂的一些需求的。
这里直接给大家推荐几个库,里面都封装好了有关PopupWindow的一系列用法:
1.RelativePopupWindow:代码简洁,支持各种位置的弹框。还能超出屏幕。用起来是这样的:
compile 'com.labo.kaji:relativepopupwindow:0.3.1'
popup.showOnAnchor(anchor, VerticalPosition.ABOVE, HorizontalPosition.CENTER);
2.EasyPopup 一个功能比较全的库,支持背景变暗,背景不可点击(6.0以上通用)等…而且可以链式调用哦。不过有个缺点:背景变暗效果只支持 4.2 以上的版本。用起来是这样的:
仓库依赖:
allprojects {
repositories {
//...
maven { url 'https://jitpack.io' }
}
}
添加依赖:
dependencies {
compile 'com.github.zyyoona7:EasyPopup:VERSION_CODE'
}
基本使用:
创建 EasyPopup 对象
可以调用 setXxx() 方法进行属性设置,最后调用 createPopup() 方法实现对PopupWindow的初始化。
private EasyPopup mCirclePop;
mCirclePop = EasyPopup.create()
.setContentView(this, R.layout.layout_circle_comment)
.setAnimationStyle(R.style.RightPopAnim)
//是否允许点击PopupWindow之外的地方消失
.setFocusAndOutsideEnable(true)
.apply();
TextView tvZan=mCirclePop.findViewById(R.id.tv_zan);
TextView tvComment=mCirclePop.findViewById(R.id.tv_comment);
tvZan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtils.showShort("赞");
mCirclePop.dismiss();
}
});
tvComment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtils.showShort("评论");
mCirclePop.dismiss();
}
});
显示
相对于 view 位置显示
/**
* 相对anchor view显示,适用 宽高不为match_parent
*
* @param anchor
* @param yGravity 垂直方向的对齐方式
* @param xGravity 水平方向的对齐方式
* @param x 水平方向的偏移
* @param y 垂直方向的偏移
*/
mCirclePop.showAtAnchorView(view, YGravity.CENTER, XGravity.LEFT, 0, 0);
除了 showAtAnchorView() 方法,内部还保留了 showAsDropDown()、showAtLocation() 方法。
今天就简单介绍到这里,具体用法大家可以参见GitHub。
上一篇: android studio 表格布局