android 弹出一个在桌面上出现的window

最近发现,如果我在Activity A的Handler里面写了消息处理事件,然后从Activity A跳转到界面B之后,A的handler还在继续处理消息,我的项目中,用户进入到房间界面了,开始接收消息,然后他也可以跳转到设置界面去进行一些房间设置,假如这个时候用户被强制T出去了,不管他在哪个界面,都需要弹出对话框显示用户被踢出,之前用的普通的Dialog,然后只有房间界面显示出来的时候才会看到被踢出去的对话框,在设置界面看不到这个,然后被测试提bug了。。。一直知道用window可以做,可是试了之后发现主要问题在于,一个是响应window的View上面的button点击事件,一个是响应系统的back回退事件,这两个要么一个都不响应,要么只能响应一种,在网上找了很久也没找到好的方法。。最后只能加了一个布尔变量来使back按键可以响应。

    private WindowManager mWindowManager = null;
    private boolean isShow;
    private View view;
        
    
    public void showMsgWindow(String tipMessage, Context context) {


        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

        WindowManager.LayoutParams params = createParams();

        view = View.inflate(context, R.layout.window, null);

        TextView message = (TextView) view.findViewById(R.id.window_message);
        Button cancel = (Button) view.findViewById(R.id.window_cancel);
        Button ok = (Button) view.findViewById(R.id.window_ok);
        message.setText(tipMessage);

        cancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                removeWindowManager();
            }
        });

        ok.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                removeWindowManager();
            }
        });
        mWindowManager.addView(view, params);
        isShow = true;
    }

    public void removeWindowManager() {
        mWindowManager.removeView(view);
        isShow = false;
    }

    public WindowManager.LayoutParams createParams() {
        WindowManager.LayoutParams params = new WindowManager.LayoutParams();

        // 类型
        params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
        params.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        params.format = PixelFormat.TRANSLUCENT;
        params.width = LayoutParams.MATCH_PARENT;
        params.height = LayoutParams.MATCH_PARENT;

        params.gravity = Gravity.CENTER;
        return params;
    }
 
  //Activity的方法 @Override
public void onBackPressed() { if (isShow) { removeWindowManager(); } else { super.onBackPressed(); } }

比较丑,勉强解决了问题。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。