2012-11-22 5 views
10

Sto cercando un modo per ottenere la dimensione di una finestra di dialogo personalizzata. Ho risposto alla domanda this, ma l'unica risposta data è abbastanza inutile, perché se provo mDialog.getWindow().getAttributes().height; restituisce solo -2, che è una costante per l'attributo WRAP_CONTENT che ho impostato per la finestra di dialogo. Come posso ottenere la dimensione di esso. Voglio sapere il siye per l'immagine di sfondo.Come ottenere le dimensioni della finestra di dialogo?

+0

cosa finestra esattamente cosa si usa? –

+0

public control ControlOverlay estende Dialog, quindi solo Dialog – slezadav

risposta

11

In realtà, in Android non funziona come in iOS - non è possibile ottenere la dimensione del View in sé, che cosa si può fare, però, è quello di chiedere per la dimensione del ROOT layout che vista.

es .:

myDialog.this.findViewById(R.id.dialog_root_layout).getHeight());

+1

Anche se restituisce la dimensione della finestra di dialogo senza un'intestazione, è esattamente ciò di cui avevo bisogno. – slezadav

+0

@Michal: ottengo che 'dialog_root_layout non può essere risolto o non è un campo' per un' AlertDialog'. –

+0

@ LuisA.Florit Invece di inserire dialog_root_layout dovresti inserire l'ID della tua finestra di dialogo. – Michal

16

fare un tentativo:

mDialog.getWindow().getDecorView().getHeight() 
+1

Grandi opere davvero bene, la risposta di Michal è comunque migliore per il mio caso. – slezadav

+8

@KorniltsevAnatoly: questo non funziona per me. Ottengo 0. –

+0

@Override public void onWindowFocusChanged (boolean hasFocus) { super.onWindowFocusChanged (hasFocus); // chiama qui } –

4

@Kormilsev Anatoliy ha risposto corretta e io sono solo migliorare. Così nella classe si eredita dalla classe Dialog solo sovrascrivere il metodo:

@Override 
public void onWindowFocusChanged (boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    hight = getWindow().getDecorView().getHeight(); 
} 
+0

e come impostare questo evento per AlertDialog ?? – user924

+1

questo 'alertDialog.setOnShowListener (new DialogInterface.OnShowListener()' funzionerà – user924

+0

Sì. Questa è una decisione per AlertDialogs maggiormente utilizzati. – CodeToLife