2010-06-10 28 views
9

Sto creando una finestra popup in un elenco nell'evento onListItemClick.Dimensione finestra popup in Android

LayoutInflater inflater = (LayoutInflater) 
this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View pop = inflater.inflate(R.layout.popupcontact, null, false); 
ImageView atnot = (ImageView)pop.findViewById(R.id.aNot); 
height = pop.getMeasuredHeight(); 
width = pop.getMeasuredWidth(); 
Log.e("pw","height: "+String.valueOf(height)+", width: "+String.valueOf(width)); 
atnot.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     pw.dismiss(); 
    } 
}); 

pw = new PopupWindow(pop, width, height, true); 

// The code below assumes that the root container has an id called 'main' 
//pw.showAtLocation(v, Gravity.CENTER, 0, 0); 
pw.showAsDropDown(v, 10, 5); 

Ora, l'altezza e la larghezza variabili dovevano essere altezza e la larghezza del layout utilizzato per la finestra pop-up (popupcontact). Ma restituiscono 0. Suppongo che sia perché il layout non è ancora stato reso. Qualcuno ha un indizio, come posso controllare la dimensione della finestra popup senza dover utilizzare numeri di pixel assoluti?

risposta

2

Non penso che il tuo codice funzionerà perché stai cercando di ottenere la larghezza e l'altezza della vista che è figlia della finestra popup.

Poiché si sta ancorando la finestra popup alla vista "v", è possibile impostare la larghezza e l'altezza in base alla vista di ancoraggio (o ad un rapporto basato su di essi)?

1

Se si desidera creare una finestra a comparsa, dare un'occhiata allo Creating Dialogs. Se si desidera utilizzare una vista completa nella finestra di dialogo, consultare questo question assicurandosi di leggere i commenti sulla risposta accettata. Penso che non sia necessario utilizzare personalmente PopupWindow per creare questa vista e il materiale di dialogo ti consentirà di ottenere risultati molto più semplici.

Se si vuole rimanere con il PopupWindow e non si desidera modificare la larghezza e l'altezza della finestra basta usare un altro constructor per PopupWindow ci sono alcuni disponibili che non hanno bisogno di altezza e larghezza. Non prendono un booleano per la capacità di mettere a fuoco la finestra ma sembra che tu possa cambiarlo più tardi tramite setFocusable().

43

Ho avuto un problema simile. Ho risolto chiamando:

pop.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 

prima di ottenere la dimensione del layout con getMeasuredHeight() e getMeasuredWidth()

+2

Am anche di fronte lo stesso problema. Funziona, ma dando meno altezza che il codice originale – vignesh

+1

mi dà un'eccezione di puntatore nullo. – Amrut

Problemi correlati