2013-08-27 2 views
18

J'essaye de faire quelque chose comme une fenêtre pop-up, qui apparaîtrait lorsqu'on clique sur une vue dans un fragment. Je veux cette fenêtre pop-up ou autre, pour ne pas rendre le fragment sombre, comme le fait un fragment de dialogue. Et je veux aussi que la fenêtre soit positionnée là où la vue est cliquée. Serait bien s'il a sa propre activité et mise en page afin que je puisse y apporter quelques modifications personnalisées. Pouvez-vous me montrer un exemple de code?Fenêtre pop-up pour afficher des éléments dans un fragment

Répondre

37

Ce qui suit devrait fonctionner parfaitement selon vos spécifications. Appelez cette méthode à 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 assez bien. anchorView est le v de onClick(View v).

+0

impressionnant, fonctionne jusqu'à présent, mais comment puis-je le faire avoir une bordure ou quelque chose? –

+1

@ БориславМинчев Eh bien, placez toute la mise en page 'popup' dans un' FrameLayout' avec un fond noir. Définir l'arrière-plan de la mise en page 'popup' en blanc et lui donner une marge de' 2dp'. – Vikram

+0

trop compliqué: D Je l'ai fait avec une image de fond avec un cadre, et la couleur intérieure transparente comme 70%. Quoi qu'il en soit, les réponses ci-dessus étaient ce que je voulais, merci –

Questions connexes