ReactNativeUtil icon indicating copy to clipboard operation
ReactNativeUtil copied to clipboard

Popwindow全屏覆盖状态栏

Open wuyunqiang opened this issue 7 years ago • 0 comments

statusbarpop.png

    //设置弹出框内容
    public void setContent(final PopupWindow popupWindow,Activity activity){
        LinearLayout linearlayout = (LinearLayout) LayoutInflater.from(activity).inflate(R.layout.share, null);
        View v = linearlayout.findViewById(R.id.background);
        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i(TAG,"点击空白区域");
                //popwindow 消失了
                popupWindow.dismiss();
            }
        });
        LinearLayout wechat = linearlayout.findViewById(R.id.wechat);
        wechat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();
            }
        });

        LinearLayout moment = linearlayout.findViewById(R.id.moment);
        moment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();
            }
        });
        View c = linearlayout.findViewById(R.id.cancel);
        c.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //popwindow 消失了
                popupWindow.dismiss();
            }
        });

        //  popupWindow.setOutsideTouchable(false);
        popupWindow.setContentView(linearlayout);
    }

    public void showPopWindow(Activity activity){
        ColorDrawable dw = new ColorDrawable(activity.getResources().getColor(R.color.colorPrimaryDark));
        LinearLayout parent = new LinearLayout(activity);
        final PopupWindow popupWindow = new PopupWindow(parent, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, true);
        popupWindow.setTouchable(true);// true popwindow优先一切(系统级以外)处理touch  false:popwindow 只是一个view 不影响界面操作
//        popupWindow.setTouchInterceptor(new View.OnTouchListener() {//并没有什么用
//            @Override
//            public boolean onTouch(View v, MotionEvent event) {
//                Log.i(TAG, "onTouch ");
//                return false;
//            }
//        });

        this.setContent(popupWindow,activity);
        popupWindow.setBackgroundDrawable(dw);//不设置背景无法点击
        fitPopupWindowOverStatusBar(popupWindow,true);
        popupWindow.showAtLocation(parent, Gravity.BOTTOM, 0, 0);//异步调用 popwindow依赖view oncreate时view并没有建立
    }


    //适配全屏
    public void fitPopupWindowOverStatusBar(PopupWindow popupWindow,boolean needFullScreen) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            try {
                Field mLayoutInScreen = PopupWindow.class.getDeclaredField("mLayoutInScreen");
                mLayoutInScreen.setAccessible(true);
                mLayoutInScreen.set(popupWindow, needFullScreen);
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }

wuyunqiang avatar Feb 09 '18 08:02 wuyunqiang