2013-05-29 10 views
14

Sto sviluppando un'applicazione per Android e sto utilizzando una finestra popup quando l'utente fa clic su un oggetto della barra dei menu specifico (costituito da piccole immagini allineate orizzontalmente) nella parte inferiore dello schermo.Android - PopupWindow sopra una vista specifica

Al clic si desidera che la finestra popup venga ancorata all'angolo in alto a sinistra della vista selezionata e visualizzata in alto.

Gli unici metodi che sembrano essere rilevanti sono showAsDropDown (Visualizza ancoraggio, int xoff, int Yoff) e showAtLocation (vista primaria, int gravità, int x, int y). Il problema con showAsDropDown è che è ancorato all'angolo in basso a sinistra della vista.

C'è un altro modo per implementare questo?

risposta

25

popupWindow.showAtLocation(...) mostra in realtà la finestra di posizionamento assoluto sullo schermo (nemmeno l'applicazione). L'ancora in tale chiamata viene utilizzata solo per il suo token finestra. Le coordinate sono offset dalla gravità data.

Quello che realmente desidera utilizzare è:

popupWindow.showAsDropDown(anchor, offsetX, offsetY, gravity); 

Questa chiamata è disponibile solo in API 19+, quindi nelle versioni precedenti è necessario utilizzare:

popupWindow.showAsDropdown(anchor, offsetX, offsetY); 

Queste chiamate mostrano la pop-up finestra relativa alla vista di ancoraggio specificata. Notare che la gravità predefinita (quando si chiama senza gravità specificata) è Gravity.TOP|Gravity.START quindi se si utilizza in modo esplicito Gravity.LEFT in vari punti della propria app si avrà un brutto momento :)

+1

Questo è quello che stavo cercando. Tutto ciò che devi calcolare è lo scostamento in base all'elemento ui che usi. – Alpaslan

5

Quello che si desidera utilizzare è showAtLocation(...). Si specifica la vista di ancoraggio (quella che l'utente fa clic) e la si posiziona rispetto a quella tramite il parametro gravity e gli offset. Pensa al parametro gravity come lo PopupWindow è quasi come una vista secondaria e la vista genitore è come un layout di contenitore.

Si dovrebbe essere in grado di inserire Gravity.LEFT | Gravity.TOP come parametro.

+7

Non c'è molta fortuna, il PopupWindow mostrerà l'angolo in alto a sinistra della finestra con quella linea (popupWindow.showAsLocation (anchor, Gravity.TOP | Gravity.LEFT, 0, 0)). –

1

popupwindow.showAsDropDown (anchor, 0, -125); questo lavoro cosa per me

6
popupWindow.showAtLocation(anchor, Gravity.BOTTOM, 0, anchor.getHeight()); 
3

Hai solo bisogno di spostare la finestra popup all'altezza di ancorare utilizzando il parametro yoff nella sintassi showAsDropDown (Visualizza ancora, int xoff, int yoff).

popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()+popupView.getHeight); 

Inoltre, BeAware che se l'altezza massima consentita per l'ancora non consente la trasformazione, il popup potrebbe non mostrare correttamente.

+0

Si prega di approfondire come questo codice risponde alla domanda (questa risposta era nella coda di revisione dei messaggi di bassa qualità). – JAL

3

Ho questo codice: PopupWindow sotto una vista specifica (Gravity End) per tutte le versioni di sdk.

 // display the popup[![enter image description here][1]][1] 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      mPopupWindow.showAsDropDown(v, 0, 0, Gravity.END); 
     } else { 
      mPopupWindow.showAsDropDown(v, v.getWidth() - mPopupWindow.getWidth(), 0); 
     } 

Qui View v è ImageButton calendario.

Problemi correlati