繁体   English   中英

即使活动在后台运行并且新的活动又回来了,也请始终将Android Popup Windows放在最前面

[英]Keep Android Popup Windows always on top , even though activity goes in background and new activity comes back

这是一个从活动A中显示的弹出窗口。用户在活动A上按下按钮,然后活动B出现在顶部。 但是问题是弹出式菜单也落后于活动B。

我希望弹出窗口始终位于最前面,即使活动落后

 LayoutInflater layoutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);

LeadOffPopView = layoutInflater.inflate(
        R.layout.leadoffdetect, null);
LeadOffPopWindow = new PopupWindow(
        LeadOffPopView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
final TextView bLATxtVw = (TextView) (LeadOffPopView)
        .findViewById(R.id.LATxtVw);
final TextView bRATextView = (TextView) (LeadOffPopView)
        .findViewById(R.id.RATxtVw);
final TextView bLLTextView = (TextView) (LeadOffPopView)
        .findViewById(R.id.LLTxtVw);
final TextView bRLTextView = (TextView) (LeadOffPopView)
        .findViewById(R.id.RLTxtVw);
final TextView bV1TextView = (TextView) (LeadOffPopView)
        .findViewById(R.id.V1TxtVw);
final TextView bV2TextView = (TextView) (LeadOffPopView)
        .findViewById(R.id.V2TxtVw);
final TextView bV3TextView = (TextView) (LeadOffPopView)
        .findViewById(R.id.V3TxtVw);
final TextView bV4TextView = (TextView) (LeadOffPopView)
        .findViewById(R.id.V4TxtVw);
final TextView bV5TextView = (TextView) (LeadOffPopView)
        .findViewById(R.id.V5TxtVw);
final TextView bV6TextView = (TextView) (LeadOffPopView)
        .findViewById(R.id.V6TxtVw);


final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        if (bLAOff) {
            bLATxtVw.setVisibility(View.VISIBLE);
        } else
            bRATextView
            .setVisibility(View.INVISIBLE);

        if (bRAOff) {
            bRATextView
            .setVisibility(View.VISIBLE);
        } else
            bRATextView
            .setVisibility(View.INVISIBLE);
        if (bLLOff) {
            bLLTextView
            .setVisibility(View.VISIBLE);
        } else
            bLLTextView
            .setVisibility(View.INVISIBLE);

        if (bRLOff) {
            bRLTextView
            .setVisibility(View.VISIBLE);
        } else
            bRLTextView
            .setVisibility(View.INVISIBLE);

        if (bV1Off) {
            if(!MainClass.bLANDSCAPEENABLED)
            bV1TextView
            .setVisibility(View.VISIBLE);
        } else
            bV1TextView
            .setVisibility(View.INVISIBLE);

        if (bV2Off) {
            if(!MainClass.bLANDSCAPEENABLED)
            bV2TextView
            .setVisibility(View.VISIBLE);
        } else
            bV2TextView
            .setVisibility(View.INVISIBLE);

        if (bV3Off) {
            if(!MainClass.bLANDSCAPEENABLED)
            bV3TextView
            .setVisibility(View.VISIBLE);
        } else
            bV3TextView
            .setVisibility(View.INVISIBLE);

        if (bV4Off) {
            if(!MainClass.bLANDSCAPEENABLED)
            bV4TextView
            .setVisibility(View.VISIBLE);
        } else
            bV4TextView
            .setVisibility(View.INVISIBLE);

        if (bV5Off) {
            if(!MainClass.bLANDSCAPEENABLED)
            bV5TextView
            .setVisibility(View.VISIBLE);
        } else
            bV5TextView
            .setVisibility(View.INVISIBLE);

        if (bV6Off) {
            if(!MainClass.bLANDSCAPEENABLED)
            bV6TextView
            .setVisibility(View.VISIBLE);
        } else
            bV6TextView
            .setVisibility(View.INVISIBLE);

        handler.postDelayed(this, 500);
    }
}, 250);

LeadOffPopWindow.showAtLocation(
        LeadOffPopView,
        Gravity.CENTER_HORIZONTAL | Gravity.TOP,20 ,
        300);

PopUpWindow / Dialog随您的Activity WindowManager上下文关联,因此只要您的活动在后台运行,PopUpWindow / Dialog也会隐藏。

因此,请使用系统警报PopupWindow / Dialog实现此目的,您可以使用以下代码创建系统对话框:

AlertDialog newDialog = new AlertDialog.Builder(context)
                    .setMessage(text)
                    .setPositiveButton(R.string.ok, null)
                    .setCancelable(true)
                    .create();
newDialog.getWindow().setType(
                    WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
newDialog.getWindow().addFlags(
                    WindowManager.LayoutParams.FLAG_DIM_BEHIND);
newDialog.show();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM