Comment créer une simple fenêtre contextuelle Android
Ceci est un exemple complet. C'est une réponse supplémentaire qui traite de la création d'une fenêtre contextuelle en général et non pas nécessairement des détails spécifiques du problème de l'OP. (L'OP demande un bouton d'annulation, mais ce n'est pas nécessaire car l'utilisateur peut cliquer n'importe où sur l'écran pour l'annuler.) Cela ressemblera à l'image suivante.
![entrer la description de l'image ici]()
Créer une mise en page pour la fenêtre contextuelle
Ajoutez un fichier de mise en page à res/layout
qui définit à quoi ressemblera la fenêtre contextuelle.
popup_window.xml
Insuffler et afficher la fenêtre contextuelle
Voici le code pour l'activité principale de notre exemple. Chaque fois que le bouton est cliqué, la fenêtre contextuelle est insufflée et affichée au-dessus de l'activité. Le fait de toucher n'importe où sur l'écran permet de fermer la fenêtre contextuelle.
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onButtonShowPopupWindowClick(View view) {
// insuffler la mise en page de la fenêtre contextuelle
LayoutInflater inflater = (LayoutInflater)
getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = inflater.inflate(R.layout.popup_window, null);
// créer la fenêtre contextuelle
int width = LinearLayout.LayoutParams.WRAP_CONTENT;
int height = LinearLayout.LayoutParams.WRAP_CONTENT;
boolean focusable = true; // les tapes en dehors de la fenêtre permettent également de la fermer
final PopupWindow popupWindow = new PopupWindow(popupView, width, height, focusable);
// afficher la fenêtre contextuelle
// peu importe quelle vue vous passez, elle est uniquement utilisée pour le jeton de fenêtre
popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
// fermer la fenêtre contextuelle lorsqu'on touche
popupView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
popupWindow.dismiss();
return true;
}
});
}
}
C'est tout. Vous avez terminé.
Suivant
Consultez comment les valeurs de gravité affectent PopupWindow.
![Fenêtre contextuelle avec gravité basse et décalages]()
Vous pouvez également ajouter une ombre.
![Fenêtre contextuelle avec ombre]()
Étude supplémentaire
Les ressources suivantes ont également été utiles pour apprendre à créer une fenêtre contextuelle :