我整天都在努力弄清楚为什么弹出窗口不会消失。
我在互联网上阅读了很多答案,但没有任何效果。
这是我的代码:
初始化:
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对应用的访问,也可以尝试另一种方法,例如我上面所述的方法