我整天都在努力弄清楚为什么弹出窗口不会消失。
我在互联网上阅读了很多答案,但没有任何效果。

这是我的代码:

初始化:

LayoutInflater inflater = (LayoutInflater) MainActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.pop_up,
(ViewGroup) findViewById(R.id.popup_element));
mPopUp = new PopupWindow(layout, mScreenWidth, mScreenHeight, true);
mPopUp.showAtLocation(layout, Gravity.CENTER, 0, 0);
mPopUp.setBackgroundDrawable(new ShapeDrawable());


背面按:

public void onBackPressed() {
if(mPopUp!=null){
mPopUp.dismiss();
}
else{
super.onBackPressed();
}
}


我真的不知道该怎么办。
我读了应该放在mPopUp.setBackgroundDrawable(new ShapeDrawable());的地方
初始化后没有运气。我已经尝试了一切。

先感谢您。

编辑:
我可以在日志中得到一个错误:

Access to extended visibility flags denied: Requires com.sonymobile.permission.SYSTEM_UI_VISIBILITY_EXTENSIONS permission.

最佳答案

我偏爱使用DialogFragment,因为它允许更多的可定制性。

public class Popup extends DialogFragment implements View.OnClickListener {
    Context c;

    public static Popup newInstance() {
        Popup f = new Popup ();

        // Supply num input as an argument.
        Bundle args = new Bundle();

        f.setArguments(args);

        return f;
    }

    public void params(Context c){
        this.c = c;
    }




    @Override
    public void onCreate(Bundle sis){
        super.onCreate(sis);

        int style, theme;

        style = DialogFragment.STYLE_NO_FRAME;
        theme = android.R.style.Theme_Holo_Dialog;


        setStyle(style, theme);

    }





    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.stats, container, false);
        this.v = v;
        setButtons();
        return v;
    }



    private void setButtons(){
        //set up all buttons, textviews etc
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.close:
                dismiss();
                break;


        }

    }
}


对于整个事情:

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prev = getFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    // Create and show the dialog.
    PopupnewFragment = Popup.newInstance();
    newFragment.params(getBaseContext(), clicker, this);
    newFragment.show(ft, "dialog");


现在,对于您收到的错误:

索尼是一个非常奇怪的制造商。他们创建了自己的权限,这些权限并不关心基础系统权限所允许的内容。需要SOny的UI可见性权限,因为您可能正在使用Sony手机进行测试。

为什么索尼有自己的权限?

因为每个非关联的手机都是经过修改的Android。每个制造商都会创建自己的操作系统的略微修改版本,这样他们就可以将自己的应用程序安装到手机上,而不必由用户安装。

因此,如果您想解决错误,则必须添加该权限,以便Sony手机可以使用您的应用。或者,您可以阻止Sony对应用的访问,也可以尝试另一种方法,例如我上面所述的方法

10-05 18:37