PopupWindow使用竟然如此简单!

这里写图片描述

前言:在日常的开发中,经常会有弹框的操作。而实现弹框有两种选择,那就是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。

猜你喜欢

转载自blog.csdn.net/qq_36437339/article/details/81203661