popupwindow 全屏遮罩并解决SDK>21窗口最上方状态栏无法遮罩

来源:互联网 发布:淘宝商品色差严重 编辑:程序博客网 时间:2024/04/28 21:19

sdk 版本小于21时,弹出的popupwindow时, 窗口最上方状态栏无法遮罩。
修复无法遮罩代码如下

import android.app.Activity;import android.content.Context;import android.os.Handler;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.view.animation.LinearInterpolator;import android.widget.PopupWindow;import android.widget.TextView;import com.blankj.utilcode.utils.ScreenUtils;/** * <b>类名称:</b> WaitScreen <br/> * <b>类描述:</b> 等待界面<br/> * <b>创建人:</b> Lincoln <br/> * <b>修改人:</b> Lincoln <br/> * <b>修改时间:</b> 16-9-28 下午5:35<br/> * <b>修改备注:</b> <br/> * * @version 1.0.0 <br/> */public class WaitScreen {    private PopupWindow popupWindow;    private Context context;    private View view;    private final View progress;    private final View wait;    private final TextView messageView;    public WaitScreen(Activity context) {        this.context = context;        view = LayoutInflater.from(context).inflate(R.layout.weight_wait_screen , null);        popupWindow = new PopupWindow(view, ScreenUtils.getScreenWidth(context), ScreenUtils.getScreenHeight(context));        //sdk > 21 解决 标题栏没有办法遮罩的问题        popupWindow.setClippingEnabled(false);        progress = view.findViewById(R.id.progress);        wait = view.findViewById(R.id.wait);        messageView = (TextView) view.findViewById(R.id.message);    }    /**     * 弹出等待提示框     */    public PopupWindow show() {        //显示在界面0,0位置上        popupWindow.showAtLocation(view, Gravity.NO_GRAVITY,0,0);        Animation rotateAnim = AnimationUtils.loadAnimation(context, R.anim.rotate_progress);        LinearInterpolator lin = new LinearInterpolator();        rotateAnim.setInterpolator(lin);        progress.startAnimation(rotateAnim);        return popupWindow;    }    /**     * 弹出等待提示框     */    public PopupWindow show(String message) {        popupWindow.showAsDropDown(view);        Animation rotateAnim = AnimationUtils.loadAnimation(context, R.anim.rotate_progress);        LinearInterpolator lin = new LinearInterpolator();        rotateAnim.setInterpolator(lin);        progress.startAnimation(rotateAnim);        messageView.setText(message);        return popupWindow;    }    /**     * 以动画的方式关闭等待弹屏     */    public void close(OnAnimationEnd onAnimationEnd) {        if (popupWindow != null && popupWindow.isShowing()) {            popupWindow.setFocusable(false);            Animation alphaAnim = AnimationUtils.loadAnimation(context, R.anim.alpha_hide_progress);            LinearInterpolator lin = new LinearInterpolator();            alphaAnim.setInterpolator(lin);            wait.startAnimation(alphaAnim);            alphaAnim.setAnimationListener(new Animation.AnimationListener() {                @Override                public void onAnimationStart(Animation animation) {                }                @Override                public void onAnimationEnd(Animation animation) {                    new Handler().post(() -> popupWindow.dismiss());                    onAnimationEnd.animationEnd();                }                @Override                public void onAnimationRepeat(Animation animation) {                }            });        }    }    /**     * 以动画的方式关闭等待弹屏     */    public void close() {        if (popupWindow != null && popupWindow.isShowing()) {            popupWindow.setFocusable(false);            Animation alphaAnim = AnimationUtils.loadAnimation(context, R.anim.alpha_hide_progress);            LinearInterpolator lin = new LinearInterpolator();            alphaAnim.setInterpolator(lin);            wait.startAnimation(alphaAnim);            alphaAnim.setAnimationListener(new Animation.AnimationListener() {                @Override                public void onAnimationStart(Animation animation) {                }                @Override                public void onAnimationEnd(Animation animation) {                    new Handler().post(() -> popupWindow.dismiss());                }                @Override                public void onAnimationRepeat(Animation animation) {                }            });        }    }    /**     * 关闭弹屏     */    public void dismiss() {        if (popupWindow != null && popupWindow.isShowing()) {            popupWindow.dismiss();        }    }    public interface OnAnimationEnd{        void animationEnd();    }}

关键代码

popupWindow.setClippingEnabled(false);
0 0
原创粉丝点击