Ответ 1
Заменить
popupWindow.setOutsideTouchable(false);
с этим
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
Я хочу отключить всплывающее окно, щелкнув за пределами всплывающего окна или кнопкой "назад", но при нажатии на кнопку "Назад" выход моего приложения вместо выхода из приложения я хочу закрыть всплывающее окно.
вот мой код,
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);
Поддерживать глобальную ссылку для PopUpWindow
и переопределять onBackPressed()
...
@Override
public void onBackPressed() {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
} else {
super.onBackPressed();
}
}
Отклонить те же Button
...
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.setBackgroundDrawable (new BitmapDrawable());
popupWindow.setOutsideTouchable(true);
;)
напишите onBackPressed(
) и получите следующий код
if(popup!=null){
//dismiss the popup
popup.dismiss();
//make popup null again
popup=null;
}
Попробуйте это.
Используйте PopupWindow popupWindow
как глобальную переменную
использовать popup.setOutsideTouchable(true);
@Override
public void onBackPressed() {
if (popupWindow != null) {
if (popupWindow.isShowing()) {
popupWindow.dismiss();
}
} else {
finish();
}
}
Попробуйте следующим образом: Внесите onBackPressed()
и добавьте
if(popup!=null) {
popup.dismiss();
popup=null;
}
И установите PopWindow
ниже:
popup.setOutsideTouchable(true);
Вы можете переопределить обратный вызов onBackPressed() в своем коде и проверить, отображается ли ваше всплывающее окно (затем отклоните его), иначе вы вызываете супер, чтобы получить нормальное поведение.