Android 按“后退”按钮关闭弹出窗口
我想通过单击弹出窗口外部或后退按钮来关闭弹出窗口,但当单击后退按钮时,我的应用程序退出,而不是退出应用程序,我想关闭弹出窗口 这是我的密码Android 按“后退”按钮关闭弹出窗口,android,android-popupwindow,Android,Android Popupwindow,我想通过单击弹出窗口外部或后退按钮来关闭弹出窗口,但当单击后退按钮时,我的应用程序退出,而不是退出应用程序,我想关闭弹出窗口 这是我的密码 ivmainmenu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub LayoutInflater layoutInfl
ivmainmenu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
LayoutInflater layoutInflater = (LayoutInflater)getBaseContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popupwindow, null);
final PopupWindow popupWindow = new PopupWindow(popupView,LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
popupWindow.showAsDropDown(ivmainmenu, 0,14);
popupView.setPadding(0, 0, 0, 10);
popupWindow.showAsDropDown(ivmainmenu);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.setOutsideTouchable(false);
TextView tvpopupwork = (TextView)popupView.findViewById(R.id.tvpopupwork);
TextView tvpopupabout = (TextView)popupView.findViewById(R.id.tvpopupabout);
TextView tvpopupservices = (TextView)popupView.findViewById(R.id.tvpopupservices);
TextView tvpopupcontact = (TextView)popupView.findViewById(R.id.tvpopupcontact);
Typeface typeFace2 = Typeface.createFromAsset(getAssets(),"fonts/arboriaboldregular.ttf");
tvpopupwork.setTypeface(typeFace2);
tvpopupabout.setTypeface(typeFace2);
tvpopupservices.setTypeface(typeFace2);
tvpopupcontact.setTypeface(typeFace2);
tvpopupwork.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Home.this,Ourwork.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
}
});
tvpopupabout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Home.this,Aboutus.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
}
});
tvpopupservices.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Home.this,Services.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
}
});
tvpopupcontact.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Home.this,Contact.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
}
});
ivmainmenu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popupWindow.dismiss();
}
});
}
});
它给了我想要的结果,但当我关闭菜单时,它不会再次打开,我想再次打开它,那么我该怎么办?
谢谢。更换
popupWindow.setOutsideTouchable(false);
用这个
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
尝试以下方法:实现
onBackPressed()
并添加
if(popup!=null) {
popup.dismiss();
popup=null;
}
并使用以下命令设置PopWindow
:
popup.setOutsideTouchable(true);
您可以在代码中覆盖onBackPressed()回调,检查弹出窗口是否已经显示(然后将其关闭),否则您可以调用super以获得正常行为。维护
PopUpWindow的全局引用并覆盖onBackPressed()
@Override
public void onBackPressed() {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
} else {
super.onBackPressed();
}
}
ivmainmenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
popupWindow = null;
} else {
// show pop up now
}
}
});
通过相同的按钮
关闭
@Override
public void onBackPressed() {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
} else {
super.onBackPressed();
}
}
ivmainmenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
popupWindow = null;
} else {
// show pop up now
}
}
});
试试这个
使用PopupWindow-PopupWindow
作为全局变量
使用popup.setOutsideTouchable(true)代码>
请在反压(
)时写入,并输入以下代码
if(popup!=null){
//dismiss the popup
popup.dismiss();
//make popup null again
popup=null;
}
@akky777当触摸在活动之外时,您将获得外部动作。但这只是为了满足我的要求,是否有任何解决方案可以通过相同的按钮关闭弹出窗口?@akky777由onBackPressed事件引起,是由宿主活动捕获的,而不是弹出窗口。如果(popupWindow!=null&&popupWindow.isShowing())我必须将背景设置为非null可绘制,至少popupWindow.setBackgroundDrawable(新彩色可绘制(彩色透明))代码>