Je souhaite fermer la fenêtre contextuelle en cliquant à l'extérieur de celle-ci ou en cliquant sur le bouton Précédent, mais lorsque vous cliquez sur le bouton Précédent, vous quittez l'application, au lieu de quitter l'application, je souhaite fermer la fenêtre contextuelle.
voici mon code,
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();
}
}
});
Cela me donne le résultat que je veux mais quand je ferme le menu il ne s'ouvre pas à nouveau, je veux l'ouvrir à nouveau alors que dois-je faire? Je vous remercie.
Remplacer
popupWindow.setOutsideTouchable(false);
avec ça
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
Conservez la référence globale pour PopUpWindow
et remplacez onBackPressed()
...
@Override
public void onBackPressed() {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
} else {
super.onBackPressed();
}
}
À écarter du même 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
}
}
});
veuillez écrire onBackPressed(
) et avoir le code suivant
if(popup!=null){
//dismiss the popup
popup.dismiss();
//make popup null again
popup=null;
}
Essayez de cette façon: implémentez onBackPressed()
et ajoutez
if(popup!=null) {
popup.dismiss();
popup=null;
}
Et définissez votre PopWindow
avec ci-dessous:
popup.setOutsideTouchable(true);
Essaye ça..
Utilisez PopupWindow popupWindow
comme variable globale
utiliser popup.setOutsideTouchable(true);
@Override
public void onBackPressed() {
if (popupWindow != null) {
if (popupWindow.isShowing()) {
popupWindow.dismiss();
}
} else {
finish();
}
}
Vous pouvez remplacer le rappel onBackPressed () dans votre code et vérifier si votre fenêtre contextuelle est déjà affichée (puis la fermer), sinon vous appelez super pour obtenir un comportement normal.