2013-08-27 12 views
18

Sto cercando di creare qualcosa come una finestra a comparsa, che verrebbe visualizzata quando si fa clic su una vista in un frammento. Voglio questa finestra pop-up o qualsiasi altra cosa, per non rendere il frammento scuro, come fa un frammento di finestra di dialogo. E voglio anche che il pop up sia posizionato dove si fa clic sulla vista. Sarebbe bello se avesse la propria attività e il proprio layout, così posso apportare alcune modifiche personalizzate. Puoi mostrarmi qualche codice di esempio?Finestra pop-up per visualizzare alcuni elementi in un frammento

risposta

37

Quanto segue dovrebbe funzionare perfettamente in base alle specifiche. Chiamare questo metodo dall'interno onClick(View v) di OnClickListener assegnato alla Vista:

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()); 

} 

I commenti dovrebbero spiegare questo abbastanza bene. anchorView è il v da onClick(View v).

+0

fantastico, funziona così lontano, ma come faccio ad avere un bordo o qualcosa del genere? –

+1

@ БориславМинчев Bene, posiziona l'intero layout 'popup' all'interno di un' FrameLayout' con sfondo nero. Imposta lo sfondo del 'popup' su bianco e dargli un margine di' 2dp'. – Vikram

+0

troppo complicato: D l'ho fatto con un'immagine di sfondo con una cornice e il colore interno trasparente al 70%. comunque, le risposte di cui sopra era quello che volevo grazie –

Problemi correlati