我正在努力弄清楚为什么弹出不会消失。 我在互联网上阅读了很多答案,但没有任何效果。
这是我的代码:
初始化:
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.
答案 0 :(得分:1)
我喜欢使用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可见性权限,因为您可能正在使用索尼手机进行测试。
为什么索尼有自己的权限?
因为每个不是nexus的手机都是Android的修改版。每个制造商都会创建自己稍微修改过的操作系统版本,这样他们就可以将自己的应用程序放入手机中,而无需用户安装。
因此,如果您想要解决错误,则必须添加该权限,以便Sony手机可以使用您的应用。另外,你可以阻止索尼对应用程序的访问权限,或者你可以尝试另一种方式,如上所述