web-dev-qa-db-fra.com

Fenêtre contextuelle pour afficher des éléments dans un fragment

J'essaye de faire quelque chose comme une fenêtre pop-up, qui apparaîtrait quand on clique sur une vue dans un fragment. Je veux que cette fenêtre pop-up ou autre, ne rende pas le fragment sombre, comme le fait un fragment de dialogue. Et je veux également que la fenêtre contextuelle soit positionnée à l'endroit où la vue est cliquée. Ce serait bien s'il a sa propre activité et sa propre disposition, je peux donc y apporter des modifications personnalisées. Pouvez-vous me montrer un exemple de code?

21

Les éléments suivants devraient fonctionner parfaitement conformément à vos spécifications. Appelez cette méthode de l'intérieur onClick(View v) de OnClickListener affecté à la vue:

public void showPopup(View anchorView) {

    View popupView = getLayoutInflater().inflate(R.layout.popup_layout, null);

    PopupWindow popupWindow = new PopupWindow(popupView, 
                           LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    // Example: If you have a TextView inside `popup_layout.xml`    
    TextView tv = (TextView) popupView.findViewById(R.id.tv);

    tv.setText(....);

    // Initialize more widgets from `popup_layout.xml`
    ....
    ....

    // If the PopupWindow should be focusable
    popupWindow.setFocusable(true);

    // If you need the PopupWindow to dismiss when when touched outside 
    popupWindow.setBackgroundDrawable(new ColorDrawable());

    int location[] = new int[2];

    // Get the View's(the one that was clicked in the Fragment) location
    anchorView.getLocationOnScreen(location);

    // Using location, the PopupWindow will be displayed right under anchorView
    popupWindow.showAtLocation(anchorView, Gravity.NO_GRAVITY, 
                                     location[0], location[1] + anchorView.getHeight());

}

Les commentaires devraient expliquer cela suffisamment bien. anchorView est le v de onClick(View v).

47
Vikram